changeset 4608:c03449c96437 geoserver_sql_views

Merge default into geoserver_sql_views
author Tom Gottfried <tom@intevation.de>
date Thu, 05 Sep 2019 17:02:03 +0200
parents 064b6c46ea6c (current diff) 086640dc0fba (diff)
children 1bf26d18b4d7
files client/docs/developer.md client/src/components/fairway/Profiles.vue schema/version.sql
diffstat 37 files changed, 2617 insertions(+), 1483 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/docs/dev-generalconsiderations.md	Thu Sep 05 17:02:03 2019 +0200
@@ -0,0 +1,67 @@
+# General considerations
+
+## We chose [vuejs](https://vuejs.org/)
+
+Vue is a modern framework for webdevelopment.
+It offers a very homogenous ecosystem (vuejs, vuecli, vue-router vuex) combined with up to date fontend rendering techniques like virtual DOM.
+
+## We chose [vue cli](https://cli.vuejs.org/)
+
+Vue cli allows a good jumpstart for a vuejs project.
+There is no manual boilerplate to write. Everything is in place and already wired. The skeleton is easy extendable and in contrast to
+other frameworks (i.e. create-react-app) there is no "eject" for further customization necessary.
+
+Configuration:
+
+- Babel
+- Router
+- Vuex
+- CSSPreprocessor
+- Linter+Unit
+- Testing+E2E
+- Testing
+- No Typescript (No advantages)
+- No PWA (IE11 compatibility makes more modern approaches unavailable)
+
+- SASS as CSS Preprocessor (widely used, allows programmatic CSS, familarity)
+- Eslint + Prettier (Rationale below)
+- Lint on Save
+- Jest as Unittesting framework (zeroconf, ease of use) [productpage](https://jestjs.io/
+- Nightwatch (Seleniumbased, familarity with selenium, Chromedriver ootB)
+
+Everything in dedicated config files
+
+## We chose [vuex](https://vuex.vuejs.org/guide/)
+
+Vuex is the store component of vuejs. For medium to complex applications it is reasonable to centralize state globally, to make every possible interaction with state transparent. Interactions with state become traceable in contrast to chains built with components and properties.
+
+Perhaps it is resonable to configure [strict mode](https://vuex.vuejs.org/api/#strict) in the future (for development). State changes should only be allowed through `actions` and `mutations`.
+
+Besides traceability vuex allows to dumb down components.
+
+## We chose [prettier](https://prettier.io/) in combination with [eslint](https://eslint.org/)
+
+To enforce tight styling guidelines (e.g. avoidance of problems with [semicolons](https://eslint.org/docs/rules/no-unexpected-multiline)) and strict formatting rules, prettier was chosen. Prettier as a plugin is widey supported:
+
+- [vim](https://github.com/prettier/vim-prettier)
+- [emacs](https://github.com/prettier/prettier-emacs)
+- [VSCode](https://github.com/prettier/prettier-vscode)
+
+On top, there is [pretty quick](https://www.npmjs.com/package/pretty-quick) a tool, which allows autmatically solving linting issues for you.
+
+Overall prettier makes styling issues a non-issue: You get achieve styled code as a result. Code which is automatically formatted is easier to read for humans (it is in every project the same guideline) and easier to read for machines (which offer help like `pretty-quick`).
+
+Similar philosophy as behind [gofmt](https://golang.org/cmd/gofmt/)
+
+## We chose [env](https://github.com/motdotla/dotenv) as configurtion file format
+
+It is good practice to store configuration in the environment (see [12 factor app](https://12factor.net/config)).
+From this idea evolved the practice to use `.env` files for configuring the environment.
+`.env` is a standard widely supported, e.g.
+
+- [go](https://github.com/joho/godotenv)
+- [Node](https://www.npmjs.com/package/dotenv)
+- [Webpack](https://www.npmjs.com/package/dotenv-webpack)
+
+Last but not least: `.env` is the format, which is used by [vue-cli](https://cli.vuejs.org/guide/mode-and-env.html)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/docs/dev-translations.md	Thu Sep 05 17:02:03 2019 +0200
@@ -0,0 +1,64 @@
+# Translation
+
+## Workflow
+
+Application -> .po files -> Weblate -> .po files -> Application
+
+### Depencencies
+
+ * `gettext` (e.g. from Debian gettext 0.19.8.1-9)
+ * `vue-gettext` and `easygettext` (e.g. via yarn or npm)
+
+In order to extract the messages from the templates call `make makemessages`.
+After that you have the `.po`-file which could be translated.
+
+After translation, `make translations` has to be called to generate the `translations.json`, that is being done automatically via yarn serve/build.
+which is consumed by `vue-gettext`.
+
+The workflow is as follows:
+
+`component.vue ---> /tmp/template.pot ---> app/locale/fr_FR/LC_MESSAGES/app.po ---> app/translations.json`
+
+(taken from the documentation of `vue-gettext`)
+
+### Some rules to marking strings for translations
+
+- `gettext` must be called only in javascript part. For html part we use `<translate>` and `<v-translate>` to make sure that `makemessages` marks the strings correctly
+- passing a value with \`\` to `gettext` leads to break up the translation process (e.g. gettext(\` text to translate ${value} \`))
+- passing html element (e.g. `<div>`) to gettext is interpreted as string.
+-  The strings to translate have to be included in the source code and not directly in `.po` files.
+
+## Why was gettext chosen?
+
+The goal was to internationalize our application for the following
+languages:
+
+- EN
+- DE
+- SK
+- HU
+- HR
+- BG
+- RO
+
+
+## We chose [vue-gettext](https://github.com/Polyconseil/vue-gettext)
+
+    Rationale:
+    * No other framework supports our preferred translation cycle fully
+    * The original string can be seen in the source code at the right place.
+    * Relies in parts on well known utilities (xgettext)
+    * Allows phrases as parameters instead of Variables
+      $gettext("Dear Sir") opposed to $("greeting")
+
+Downsides:
+
+- At present (July 2018) there are some annoying issues, which demand quirky solutions:
+
+  - [xgettext fails with some .vue files](https://github.com/Polyconseil/vue-gettext/issues/28) which forces us to use `(`, `)` around templates
+  - [translations in attributes](https://github.com/Polyconseil/vue-gettext/issues/9) which leaves us with either interpolating in templates with `<translate></translate>` or use computed properties in Vue components (cf. Login component).
+  - [inconsistent white space handling](https://github.com/Polyconseil/vue-gettext/issues/80) if you need a white space preserved before the translated tag, use `<span v-translate class="fix-trans-space">to be translated</a>` (see `src/assets/application.sass`).
+
+- Is dependent on external (=non JS) tools (`xgettext`) which are not able to consume `.vue`-files directly, which in turn leads to unexpected behaviour.
+-
+
--- a/client/docs/developer.md	Thu Sep 05 16:55:40 2019 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-# General considerations
-
-## We chose [vuejs](https://vuejs.org/)
-
-Vue is a modern framework for webdevelopment.
-It offers a very homogenous ecosystem (vuejs, vuecli, vue-router vuex) combined with up to date fontend rendering techniques like virtual DOM.
-
-## We chose [vue cli](https://cli.vuejs.org/)
-
-Vue cli allows a good jumpstart for a vuejs project.
-There is no manual boilerplate to write. Everything is in place and already wired. The skeleton is easy extendable and in contrast to
-other frameworks (i.e. create-react-app) there is no "eject" for further customization necessary.
-
-Configuration:
-
-- Babel
-- Router
-- Vuex
-- CSSPreprocessor
-- Linter+Unit
-- Testing+E2E
-- Testing
-- No Typescript (No advantages)
-- No PWA (IE11 compatibility makes more modern approaches unavailable)
-
-- SASS as CSS Preprocessor (widely used, allows programmatic CSS, familarity)
-- Eslint + Prettier (Rationale below)
-- Lint on Save
-- Jest as Unittesting framework (zeroconf, ease of use) [productpage](https://jestjs.io/
-- Nightwatch (Seleniumbased, familarity with selenium, Chromedriver ootB)
-
-Everything in dedicated config files
-
-## We chose [vuex](https://vuex.vuejs.org/guide/)
-
-Vuex is the store component of vuejs. For medium to complex applications it is reasonable to centralize state globally, to make every possible interaction with state transparent. Interactions with state become traceable in contrast to chains built with components and properties.
-
-Perhaps it is resonable to configure [strict mode](https://vuex.vuejs.org/api/#strict) in the future (for development). State changes should only be allowed through `actions` and `mutations`.
-
-Besides traceability vuex allows to dumb down components.
-
-## We chose [prettier](https://prettier.io/) in combination with [eslint](https://eslint.org/)
-
-To enforce tight styling guidelines (e.g. avoidance of problems with [semicolons](https://eslint.org/docs/rules/no-unexpected-multiline)) and strict formatting rules, prettier was chosen. Prettier as a plugin is widey supported:
-
-- [vim](https://github.com/prettier/vim-prettier)
-- [emacs](https://github.com/prettier/prettier-emacs)
-- [VSCode](https://github.com/prettier/prettier-vscode)
-
-On top, there is [pretty quick](https://www.npmjs.com/package/pretty-quick) a tool, which allows autmatically solving linting issues for you.
-
-Overall prettier makes styling issues a non-issue: You get achieve styled code as a result. Code which is automatically formatted is easier to read for humans (it is in every project the same guideline) and easier to read for machines (which offer help like `pretty-quick`).
-
-Similar philosophy as behind [gofmt](https://golang.org/cmd/gofmt/)
-
-## We chose [env](https://github.com/motdotla/dotenv) as configurtion file format
-
-It is good practice to store configuration in the environment (see [12 factor app](https://12factor.net/config)).
-From this idea evolved the practice to use `.env` files for configuring the environment.
-`.env` is a standard widely supported, e.g.
-
-- [go](https://github.com/joho/godotenv)
-- [Node](https://www.npmjs.com/package/dotenv)
-- [Webpack](https://www.npmjs.com/package/dotenv-webpack)
-
-Last but not least: `.env` is the format, which is used by [vue-cli](https://cli.vuejs.org/guide/mode-and-env.html)
-
-# Translation
-
-We want to internationalize our application for the following
-languages:
-
-- EN
-- DE
-- SK
-- HU
-- HR
-- BG
-- RO
-
-## Our preferred translation cycle is as follows:
-
-Application -> .po files -> Weblate -> .po files -> Application
-
-There are several possibilities to achieve this goal.
-
-## We chose [vue-gettext](https://github.com/Polyconseil/vue-gettext)
-
-    Rationale:
-    * No other framework supports our preferred translation cycle fully
-    * Relies in parts on well known utilities (xgettext)
-    * Allows phrases as parameters instead of Variables
-      $gettext("Dear Sir") opposed to $("greeting")
-
-Downsides:
-
-- At present (July 2018) there are some annoying issues, which demand quirky solutions:
-
-  - [xgettext fails with some .vue files](https://github.com/Polyconseil/vue-gettext/issues/28) which forces us to use `(`, `)` around templates
-  - [translations in attributes](https://github.com/Polyconseil/vue-gettext/issues/9) which leaves us with either interpolating in templates with `<translate></translate>` or use computed properties in Vue components (cf. Login component).
-  - [inconsistent white space handling](https://github.com/Polyconseil/vue-gettext/issues/80) if you need a white space preserved before the translated tag, use `<span v-translate class="fix-trans-space">to be translated</a>` (see `src/assets/application.sass`).
-
-- Is dependend on external (=non JS) tools (`xgettext`) which are not able to consume `.vue`-files directly, which in turn leads to unexpected behaviour.
--
-
-## Commands
-You need the following applications to run the process:
- * `gettext` (e.g. from Debian gettext 0.19.8.1-9)
- * `vue-gettext` and `easygettext` (e.g. via yarn or npm)
-
-In order to extract the messages from the templates call `make makemessages`.
-After that you have the `.po`-file which could be translated.
-
-After translation, `make translations` has to be called to generate the `translations.json`, that is being done automatically via yarn serve/build.
-which is consumed by `vue-gettext`.
-
-The workflow is as follows:
-
-`component.vue ---> /tmp/template.pot ---> app/locale/fr_FR/LC_MESSAGES/app.po ---> app/translations.json`
-
-(taken from the documentation of `vue-gettext`)
-
-## Some rules to marking strings for translations
-
-- `gettext` must be called only in javascript part. For html part we use `<translate>` and `<v-translate>` to make sure that `makemessages` marks the strings correctly
-- passing a value with \`\` to `gettext` leads to break up the translation process (e.g. gettext(\` text to translate ${value} \`))
-- passing html element (e.g. `<div>`) to gettext is interpreted as string.
--  The strings to translate have to be included in the source code and not directly in `.po` files.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/docs/developers.md	Thu Sep 05 17:02:03 2019 +0200
@@ -0,0 +1,37 @@
+When developing wamos, check out
+
+* [How translations are handled](dev-translations.md)
+* [Rationale of some choices](dev-generalconsiderations.md)
+
+## Hints
+
+When testing the vuex store object can be accessed from the
+webbrowsers console like
+
+```javascript
+store = document.getElementsByTagName('a')[0].__vue__.$store
+```
+
+This allows for setting test values where getting real test data
+is complicated. For example testing the diagramm for the
+fairwayavailability (tested with Chromium 73 und gemma-2019-09-04):
+
+```javascript
+data = store.state.fairwayavailability.csv
+
+data=`#time,# < LDC (164.0) [h],# >= LDC (164.0) [h],# < 230.0 [h],# >= 230.0 [h],# >= 250.0 [h]
+01-2019,0  ,744,  0,  0,744
+02-2019,324,324,150,174,324
+03-2019, 24,696, 80, 45, 50
+04-2019,120,600, 24, 24,672.5
+05-2019,140,80 , 80, 45, 50
+06-2019,  0,  0,  0,  0,  0.000
+07-2019,  0,300,  0,  0,  0
+08-2019,  0,  0,744,  0,  0
+09-2019,  0,720,  0, 96,624
+`
+
+store.commit("fairwayavailability/setAvailableFairwayDepthData", data)
+```
+
+(Depends on the code structure in store/fairwayavailability.js.)
--- a/client/src/components/App.vue	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/App.vue	Thu Sep 05 17:02:03 2019 +0200
@@ -97,7 +97,7 @@
     }
   },
   components: {
-    Profiles: () => import("./fairway/Profiles"),
+    Profiles: () => import("./fairway/BottleneckDialogue"),
     Gauges: () => import("./gauge/Gauges"),
     Pdftool: () => import("./Pdftool"),
     Identify: () => import("./identify/Identify"),
--- a/client/src/components/fairway/AvailableFairwayDepth.vue	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/fairway/AvailableFairwayDepth.vue	Thu Sep 05 17:02:03 2019 +0200
@@ -42,6 +42,17 @@
             >Download CSV</a
           >
         </div>
+        <div class="btn-group-toggle w-100 mt-2">
+          <label
+            class="btn btn-outline-secondary btn-sm"
+            :class="{ active: showNumbers }"
+            ><input
+              type="checkbox"
+              v-model="showNumbers"
+              autocomplete="off"
+            />Numbers
+          </label>
+        </div>
       </DiagramLegend>
       <div
         ref="diagramContainer"
@@ -69,6 +80,7 @@
  * * Thomas Junk <thomas.junk@intevation.de>
  * * Markus Kottländer <markus.kottlaender@intevation.de>
  * * Fadi Abbud <fadi.abbud@intevation.de>
+ * * Bernhard Reiter <bernhard.reiter@intevation.de>
  */
 import * as d3 from "d3";
 import app from "@/main";
@@ -81,7 +93,14 @@
 import { FREQUENCIES } from "@/store/fairwayavailability";
 import { defaultDiagramTemplate } from "@/lib/DefaultDiagramTemplate";
 
-const hoursInDays = x => Math.round(x / 24);
+// FIXME This is a rounding methods that shows that we have fractions,
+// because we are coming from hours.  Users will understand the underlying
+// math better and we can see if this is wanted.
+// With the backend just giving us the summarized hours, we cannot do
+// a classification of each day into a category.
+// (The name of the function is kept to keep the diff more readable and
+// should changed if this is more clarified.)
+const hoursInDays = x => Math.round((x * 10) / 24) / 10;
 
 export default {
   mixins: [diagram, pdfgen, templateLoader],
@@ -106,7 +125,8 @@
       },
       templateData: null,
       templates: [],
-      defaultTemplate: defaultDiagramTemplate
+      defaultTemplate: defaultDiagramTemplate,
+      showNumbers: false
     };
   },
   created() {
@@ -454,9 +474,8 @@
           const dy = document
             .querySelector(".diagram-container")
             .getBoundingClientRect().left;
-          const value = Number.parseFloat(hoursInDays(d.height)).toFixed(2);
           d3.select("#tooltip")
-            .text(Math.round(value))
+            .text(hoursInDays(d.height))
             .attr("y", y - 10)
             .attr("x", d3.event.pageX - dy);
           //d3.event.pageX gives coordinates relative to SVG
@@ -472,9 +491,33 @@
         })
         .attr("x", ldcOffset + spaceBetween / 2)
         .attr("width", widthPerItem - ldcOffset - spaceBetween)
+        .attr("id", "lower")
         .attr("fill", (d, i) => {
           return this.$options.COLORS.REST[i];
         });
+      if (this.showNumbers) {
+        everyBar
+          .selectAll("g.bars")
+          .data(d => d.lowerLevels)
+          .enter()
+          .filter(d => hoursInDays(d.height) > 0)
+          .insert("text")
+          .attr("y", d => {
+            return (
+              2 * yScale(0) -
+              yScale(hoursInDays(d.translateY)) +
+              this.paddingTop +
+              (yScale(0) - yScale(hoursInDays(d.height))) +
+              (yScale(0) - yScale(1.9)) //instead o alignment-baseline hanging
+            );
+          })
+          .attr("x", widthPerItem / 2)
+          .text(d => hoursInDays(d.height))
+          // does not work with svg2pdf .attr("alignment-baseline", "hanging")
+          .attr("text-anchor", "middle")
+          .attr("font-size", "8")
+          .attr("fill", "black");
+      }
     },
     fnheight({ name, yScale }) {
       return d => yScale(0) - yScale(hoursInDays(d[name]));
@@ -484,7 +527,7 @@
       everyBar
         .append("rect")
         .on("mouseover", function() {
-          d3.select(this).attr("opacity", "0.8");
+          d3.select(this).attr("opacity", "0.7");
           d3.select("#tooltip").attr("opacity", 1);
         })
         .on("mouseout", function() {
@@ -496,9 +539,8 @@
           const dy = document
             .querySelector(".diagram-container")
             .getBoundingClientRect().left;
-          const value = Number.parseFloat(hoursInDays(d.ldc)).toFixed(2);
           d3.select("#tooltip")
-            .text(Math.round(value))
+            .text(hoursInDays(d.ldc))
             .attr("y", y - 50)
             .attr("x", d3.event.pageX - dy);
           //d3.event.pageX gives coordinates relative to SVG
@@ -514,6 +556,21 @@
         )
         .attr("fill", this.$options.COLORS.LDC)
         .attr("id", "ldc");
+      if (this.showNumbers) {
+        everyBar
+          .filter(d => hoursInDays(d.ldc) > 0)
+          .append("text")
+          .attr("y", yScale(0.5)) // some distance from the bar
+          .attr("x", spaceBetween / 2)
+          .text(d => hoursInDays(d.ldc))
+          .attr("text-anchor", "left")
+          .attr("font-size", "8")
+          .attr(
+            "transform",
+            d => `translate(0 ${this.paddingTop + -1 * height(d)})`
+          )
+          .attr("fill", "black");
+      }
     },
     drawHighestLevel({
       everyBar,
@@ -538,11 +595,8 @@
           const dy = document
             .querySelector(".diagram-container")
             .getBoundingClientRect().left;
-          const value = Number.parseFloat(hoursInDays(d.highestLevel)).toFixed(
-            2
-          );
           d3.select("#tooltip")
-            .text(Math.round(value))
+            .text(hoursInDays(d.highestLevel))
             .attr("y", y - 50)
             .attr("x", d3.event.pageX - dy);
           //d3.event.pageX gives coordinates relative to SVG
@@ -557,6 +611,21 @@
           d => `translate(0 ${this.paddingTop + -1 * height(d)})`
         )
         .attr("fill", this.$options.COLORS.HIGHEST);
+      if (this.showNumbers) {
+        everyBar
+          .filter(d => hoursInDays(d.highestLevel) > 0)
+          .append("text")
+          .attr("y", yScale(0.5)) // some distance from the bar
+          .attr("x", widthPerItem / 2)
+          .text(d => hoursInDays(d.highestLevel))
+          .attr("text-anchor", "middle")
+          .attr("font-size", "8")
+          .attr(
+            "transform",
+            d => `translate(0 ${this.paddingTop + -1 * height(d)})`
+          )
+          .attr("fill", "black");
+      }
     },
     drawLabelPerBar({ everyBar, dimensions, widthPerItem }) {
       everyBar
@@ -647,13 +716,16 @@
   watch: {
     fwData() {
       this.drawDiagram();
+    },
+    showNumbers() {
+      this.drawDiagram();
     }
   },
   LEGEND: app.$gettext("Sum of days"),
   COLORS: {
-    LDC: "#cdcdcd",
-    HIGHEST: "#3675ff",
-    REST: ["#782121", "#ff6c6c", "#ffaaaa"]
+    LDC: "aqua",
+    HIGHEST: "blue",
+    REST: ["hotpink", "darksalmon", "#ffaaaa"]
   }
 };
 </script>
--- a/client/src/components/fairway/AvailableFairwayDepthLNWL.vue	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/fairway/AvailableFairwayDepthLNWL.vue	Thu Sep 05 17:02:03 2019 +0200
@@ -606,9 +606,9 @@
     }
   },
   LEGEND: app.$gettext("Percent"),
-  AFDCOLORS: ["#3636ff", "#f49b7f", "#e15472"],
+  AFDCOLORS: ["blue", "darksalmon", "hotpink"],
   LWNLCOLORS: {
-    LDC: "#97ddf3",
+    LDC: "aqua",
     HDC: "#43FFE1"
   }
 };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/src/components/fairway/BottleneckDialogue.vue	Thu Sep 05 17:02:03 2019 +0200
@@ -0,0 +1,707 @@
+<template>
+  <div
+    :class="[
+      'box ui-element rounded bg-white text-nowrap',
+      { expanded: showProfiles }
+    ]"
+  >
+    <div style="width: 18rem">
+      <UIBoxHeader
+        icon="chart-area"
+        :title="profilesLable"
+        :closeCallback="close"
+      />
+      <div class="box-body">
+        <UISpinnerOverlay v-if="surveysLoading || profileLoading" />
+        <select
+          @change="moveToBottleneck"
+          v-model="selectedBottleneck"
+          class="form-control font-weight-bold"
+        >
+          <option :value="null">
+            <translate>Select Bottleneck</translate>
+          </option>
+          <optgroup
+            v-for="(bottlenecksForCountry, cc) in orderedBottlenecks"
+            :key="cc"
+            :label="cc"
+          >
+            <option
+              v-for="bn in bottlenecksForCountry"
+              :key="bn.properties.id"
+              :value="bn.properties.name"
+            >
+              {{ bn.properties.name }}
+            </option>
+          </optgroup>
+        </select>
+        <div v-if="selectedBottleneck">
+          <div class="d-flex flex-column mt-2">
+            <div class="flex-fill">
+              <small class="text-muted">
+                <translate>Waterlevel</translate>:
+              </small>
+              <select
+                v-model="selectedWaterLevel"
+                class="form-control form-control-sm small"
+              >
+                <option value="ref">
+                  <translate>Depth Reference</translate>
+                  <template v-if="selectedSurvey">
+                    ({{ selectedSurvey.depth_reference }}/{{
+                      $options.filters.waterlevel(
+                        selectedSurvey.waterlevel_value
+                      )
+                    }}
+                    m)
+                  </template>
+                </option>
+                <option value="current">
+                  <translate>Current Waterlevel</translate>
+                  <template v-if="bottleneck">
+                    ({{
+                      $options.filters.waterlevel(
+                        bottleneck.get("gm_waterlevel")
+                      )
+                    }}
+                    m)
+                  </template>
+                </option>
+              </select>
+            </div>
+            <div class="flex-fill">
+              <small class="text-muted"> <translate>Survey</translate>: </small>
+              <div class="d-flex">
+                <select
+                  v-model="selectedSurvey"
+                  class="form-control form-control-sm small"
+                >
+                  <option
+                    v-for="survey in surveys"
+                    :key="survey.date_info"
+                    :value="survey"
+                    >{{ survey.date_info | surveyDate }}</option
+                  >
+                </select>
+                <button
+                  class="btn btn-dark btn-xs ml-2"
+                  @click="deleteSelectedSurvey"
+                >
+                  <font-awesome-icon icon="trash" />
+                </button>
+              </div>
+            </div>
+            <div class="flex-fill" v-if="selectedSurvey && surveys.length > 1">
+              <small class="text-muted mt-1">
+                <translate>Compare with</translate>:
+              </small>
+              <select
+                v-model="additionalSurvey"
+                class="form-control form-control-sm small"
+              >
+                <option :value="null">None</option>
+                <option
+                  v-for="survey in additionalSurveys"
+                  :key="survey.date_info"
+                  :value="survey"
+                  >{{ survey.date_info | surveyDate }}</option
+                >
+              </select>
+            </div>
+          </div>
+          <div class="mt-2 d-flex" v-if="additionalSurvey">
+            <button
+              v-if="differencesLoading"
+              class="btn btn-info btn-xs flex-fill"
+              disabled
+            >
+              <font-awesome-icon icon="spinner" spin class="mr-1" />
+              <translate>Calculating differences</translate>
+            </button>
+            <button
+              class="btn btn-info btn-xs flex-fill"
+              @click="differencesVisible ? showSurvey() : showDifferences()"
+              v-else
+            >
+              <translate v-if="differencesVisible" key="showsurvey"
+                >Show survey</translate
+              >
+              <translate v-else key="showdifferences"
+                >Show differences</translate
+              >
+            </button>
+            <button
+              v-if="!paneSetup.includes('FAIRWAYPROFILE')"
+              class="btn btn-info btn-xs ml-2"
+              @click="$store.commit('application/paneRotate')"
+              v-tooltip="rotatePanesTooltip"
+            >
+              <font-awesome-icon icon="redo" fixed-width />
+            </button>
+            <button
+              class="btn btn-info btn-xs ml-2"
+              @click="toggleSyncMaps()"
+              v-tooltip="syncMapsTooltip"
+            >
+              <font-awesome-icon
+                :icon="mapsAreSynced ? 'unlink' : 'link'"
+                fixed-width
+              />
+            </button>
+          </div>
+          <hr class="w-100 mb-0" />
+          <small class="text-muted d-block mt-2">
+            <translate>Saved cross profiles</translate>:
+          </small>
+          <div class="d-flex">
+            <select
+              :class="[
+                'form-control form-control-sm flex-fill',
+                { 'rounded-left-only': selectedCut }
+              ]"
+              v-model="selectedCut"
+            >
+              <option></option>
+              <option
+                v-for="(cut, index) in previousCuts"
+                :value="cut"
+                :key="index"
+                >{{ cut.label }}</option
+              >
+            </select>
+            <button
+              class="btn btn-xs btn-dark ml-2"
+              @click="deleteSelectedCut(selectedCut)"
+              v-if="selectedCut"
+            >
+              <font-awesome-icon icon="trash" />
+            </button>
+          </div>
+          <small class="text-muted d-block mt-2">
+            <translate>Enter coordinates manually</translate>:
+          </small>
+          <div class="position-relative">
+            <input
+              class="form-control form-control-sm pr-5"
+              placeholder="Lat,Lon,Lat,Lon"
+              v-model="coordinatesInput"
+            />
+            <button
+              class="btn btn-sm btn-info position-absolute input-button-right"
+              @click="applyManualCoordinates"
+              style="top: 0; right: 0;"
+              v-if="coordinatesInputIsValid"
+            >
+              <font-awesome-icon icon="check" />
+            </button>
+          </div>
+          <small class="d-flex text-left mt-2" v-if="startPoint && endPoint">
+            <div class="text-nowrap mr-3">
+              <b> <translate>Start</translate>: </b> <br />
+              Lat: {{ startPoint[1] }} <br />
+              Lon: {{ startPoint[0] }}
+            </div>
+            <div class="text-nowrap">
+              <b>End:</b> <br />
+              Lat: {{ endPoint[1] }} <br />
+              Lon: {{ endPoint[0] }}
+            </div>
+            <button
+              v-clipboard:copy="coordinatesForClipboard"
+              v-clipboard:success="onCopyCoordinates"
+              class="btn btn-info btn-sm ml-auto mt-auto"
+            >
+              <font-awesome-icon icon="copy" />
+            </button>
+          </small>
+          <div class="d-flex mt-3">
+            <div
+              class="pr-3 w-50"
+              v-if="startPoint && endPoint && !selectedCut"
+            >
+              <button
+                class="btn btn-info btn-sm w-100"
+                @click="showLabelInput = !showLabelInput"
+              >
+                <font-awesome-icon :icon="showLabelInput ? 'times' : 'check'" />
+                {{ showLabelInput ? "Cancel" : "Save" }}
+              </button>
+            </div>
+            <div
+              :class="startPoint && endPoint && !selectedCut ? 'w-50' : 'w-100'"
+            >
+              <button
+                class="btn btn-info btn-sm w-100"
+                @click="toggleCutTool"
+                :disabled="!selectedSurvey"
+              >
+                <font-awesome-icon :icon="cutToolEnabled ? 'times' : 'plus'" />
+                {{ cutToolEnabled ? "Cancel" : "New" }}
+              </button>
+            </div>
+          </div>
+          <div v-if="showLabelInput" class="mt-2">
+            <small class="text-muted">
+              <translate>Enter label for cross profile</translate>:
+            </small>
+            <div class="position-relative">
+              <input
+                class="form-control form-control-sm pr-5"
+                v-model="cutLabel"
+              />
+              <button
+                class="btn btn-sm btn-info position-absolute input-button-right"
+                @click="saveCut"
+                v-if="cutLabel"
+                style="top: 0; right: 0;"
+              >
+                <font-awesome-icon icon="check" />
+              </button>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.input-button-right {
+  border-top-right-radius: $border-radius;
+  border-bottom-right-radius: $border-radius;
+  border-top-left-radius: 0 !important;
+  border-bottom-left-radius: 0 !important;
+}
+
+.rounded-left-only {
+  border-top-right-radius: 0 !important;
+  border-bottom-right-radius: 0 !important;
+  border-top-left-radius: $border-radius;
+  border-bottom-left-radius: $border-radius;
+}
+
+input,
+select {
+  font-size: 0.8em;
+}
+</style>
+
+<script>
+/* This is Free Software under GNU Affero General Public License v >= 3.0
+ * without warranty, see README.md and license for details.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ * License-Filename: LICENSES/AGPL-3.0.txt
+ *
+ * Copyright (C) 2018 by via donau
+ *   – Österreichische Wasserstraßen-Gesellschaft mbH
+ * Software engineering by Intevation GmbH
+ *
+ * Author(s):
+ * Markus Kottländer <markus.kottlaender@intevation.de>
+ */
+import { mapState, mapGetters } from "vuex";
+import Feature from "ol/Feature";
+import LineString from "ol/geom/LineString";
+import { displayError, displayInfo } from "@/lib/errors";
+import { HTTP } from "@/lib/http";
+import { COMPARESURVEYS } from "@/components/paneSetups";
+import lib from "@/lib/filters";
+
+export default {
+  name: "profiles",
+  data() {
+    return {
+      coordinatesInput: "",
+      cutLabel: "",
+      showLabelInput: false
+    };
+  },
+  computed: {
+    ...mapState("application", ["showProfiles", "paneSetup"]),
+    ...mapState("map", ["openLayersMaps", "syncedMaps", "cutToolEnabled"]),
+    ...mapState("bottlenecks", [
+      "bottlenecksList",
+      "surveys",
+      "surveysLoading"
+    ]),
+    ...mapState("fairwayprofile", [
+      "previousCuts",
+      "startPoint",
+      "endPoint",
+      "profileLoading",
+      "differencesLoading",
+      "waterLevels",
+      "currentProfile"
+    ]),
+    ...mapGetters("map", ["openLayersMap"]),
+    ...mapGetters("bottlenecks", ["orderedBottlenecks"]),
+    profilesLable() {
+      return this.$gettext("Bottleneck Surveys");
+    },
+    selectedBottleneck: {
+      get() {
+        return this.$store.state.bottlenecks.selectedBottleneck;
+      },
+      set(name) {
+        this.$store.dispatch("bottlenecks/setSelectedBottleneck", name);
+      }
+    },
+    selectedWaterLevel: {
+      get() {
+        return this.$store.state.fairwayprofile.selectedWaterLevel;
+      },
+      set(value) {
+        this.$store.commit("fairwayprofile/setSelectedWaterLevel", value);
+      }
+    },
+    selectedSurvey: {
+      get() {
+        return this.$store.state.bottlenecks.selectedSurvey;
+      },
+      set(survey) {
+        this.$store.commit("fairwayprofile/additionalSurvey", null);
+        this.$store.commit("bottlenecks/selectedSurvey", survey);
+      }
+    },
+    additionalSurvey: {
+      get() {
+        return this.$store.state.fairwayprofile.additionalSurvey;
+      },
+      set(survey) {
+        this.$store.commit("fairwayprofile/additionalSurvey", survey);
+      }
+    },
+    selectedCut: {
+      get() {
+        return this.$store.state.fairwayprofile.selectedCut;
+      },
+      set(cut) {
+        this.$store.commit("fairwayprofile/selectedCut", cut);
+        if (!cut) {
+          this.$store.commit("fairwayprofile/clearCurrentProfile");
+          this.openLayersMaps.forEach(m => {
+            m.getLayer("CUTTOOL")
+              .getSource()
+              .clear();
+          });
+        }
+      }
+    },
+    additionalSurveys() {
+      return this.surveys.filter(
+        survey => survey.date_info !== this.selectedSurvey.date_info
+      );
+    },
+    coordinatesForClipboard() {
+      return (
+        this.startPoint[1] +
+        "," +
+        this.startPoint[0] +
+        "," +
+        this.endPoint[1] +
+        "," +
+        this.endPoint[0]
+      );
+    },
+    coordinatesInputIsValid() {
+      const coordinates = this.coordinatesInput
+        .split(",")
+        .map(coord => parseFloat(coord.trim()))
+        .filter(c => Number(c) === c);
+      return coordinates.length === 4;
+    },
+    differencesVisible() {
+      return (
+        this.openLayersMap(COMPARESURVEYS.compare.id) &&
+        !this.openLayersMap(COMPARESURVEYS.compare.id)
+          .getLayer("BOTTLENECKISOLINE")
+          .getVisible() &&
+        this.openLayersMap(COMPARESURVEYS.compare.id)
+          .getLayer("DIFFERENCES")
+          .getVisible()
+      );
+    },
+    rotatePanesTooltip() {
+      return this.$gettext("Rotate Maps");
+    },
+    syncMapsTooltip() {
+      return this.$gettext(
+        this.mapsAreSynced ? "Unsynchronize Maps" : "Synchronize Maps"
+      );
+    },
+    mapsAreSynced() {
+      return this.syncedMaps.includes(COMPARESURVEYS.compare.id);
+    },
+    bottleneck() {
+      return this.openLayersMap()
+        ? this.openLayersMap()
+            .getLayer("BOTTLENECKS")
+            .getSource()
+            .getFeatures()
+            .find(f => f.get("objnam") === this.selectedBottleneck)
+        : null;
+    }
+  },
+  watch: {
+    selectedBottleneck() {
+      this.$store.dispatch("fairwayprofile/previousCuts");
+      this.cutLabel =
+        this.selectedBottleneck + " (" + new Date().toISOString() + ")";
+    },
+    selectedSurvey(survey) {
+      this.loadProfile(survey);
+    },
+    additionalSurvey(survey) {
+      if (survey) {
+        this.loadDifferences();
+        this.$store.commit(
+          "application/paneSetup",
+          Object.keys(this.currentProfile).length
+            ? "COMPARESURVEYS_FAIRWAYPROFILE"
+            : "COMPARESURVEYS"
+        );
+        this.$store.commit("map/syncedMaps", [COMPARESURVEYS.compare.id]);
+      } else {
+        this.$store.commit(
+          "application/paneSetup",
+          Object.keys(this.currentProfile).length ? "FAIRWAYPROFILE" : "DEFAULT"
+        );
+        this.$store.commit("map/syncedMaps", []);
+      }
+      this.loadProfile(survey);
+    },
+    selectedCut(cut) {
+      if (cut) {
+        this.applyCoordinates(cut.coordinates);
+      }
+    }
+  },
+  methods: {
+    toggleSyncMaps() {
+      if (this.mapsAreSynced) {
+        this.$store.commit(
+          "map/syncedMaps",
+          this.syncedMaps.filter(m => m !== COMPARESURVEYS.compare.id)
+        );
+      } else {
+        this.$store.commit("map/syncedMaps", [COMPARESURVEYS.compare.id]);
+      }
+    },
+    loadDifferences() {
+      this.$store.commit("fairwayprofile/setDifferencesLoading", true);
+      HTTP.post(
+        "/diff",
+        {
+          bottleneck: this.selectedSurvey.bottleneck_id,
+          minuend: this.selectedSurvey.date_info,
+          subtrahend: this.additionalSurvey.date_info
+        },
+        {
+          headers: {
+            "X-Gemma-Auth": localStorage.getItem("token")
+          }
+        }
+      )
+        .then()
+        .catch(error => {
+          let status, data, message;
+          if (error.response) {
+            status = error.response.status;
+            data = error.response.data;
+            message = `${status}: ${data.message || data}`;
+          } else {
+            message = error;
+          }
+          displayError({
+            title: this.$gettext("Backend Error"),
+            message: message
+          });
+        })
+        .finally(() => {
+          this.$store.commit("fairwayprofile/setDifferencesLoading", false);
+        });
+    },
+    showDifferences() {
+      this.openLayersMap(COMPARESURVEYS.compare.id)
+        .getLayer("BOTTLENECKISOLINE")
+        .setVisible(false);
+      this.openLayersMap(COMPARESURVEYS.compare.id)
+        .getLayer("DIFFERENCES")
+        .setVisible(true);
+    },
+    showSurvey() {
+      this.openLayersMap(COMPARESURVEYS.compare.id)
+        .getLayer("BOTTLENECKISOLINE")
+        .setVisible(true);
+      this.openLayersMap(COMPARESURVEYS.compare.id)
+        .getLayer("DIFFERENCES")
+        .setVisible(false);
+    },
+    close() {
+      this.$store.commit("application/showProfiles", false);
+    },
+    loadProfile(survey) {
+      if (survey) {
+        this.$store.commit("fairwayprofile/profileLoading", true);
+        this.$store
+          .dispatch("fairwayprofile/loadProfile", survey)
+          .finally(() => {
+            this.$store.commit("fairwayprofile/profileLoading", false);
+          });
+      }
+    },
+    toggleCutTool() {
+      this.$store.commit("map/cutToolEnabled", !this.cutToolEnabled);
+      this.$store.commit("map/lineToolEnabled", false);
+      this.$store.commit("map/polygonToolEnabled", false);
+      this.$store.commit("map/setCurrentMeasurement", null);
+    },
+    onCopyCoordinates() {
+      displayInfo({
+        message: this.$gettext("Coordinates copied to clipboard!")
+      });
+    },
+    applyManualCoordinates() {
+      const coordinates = this.coordinatesInput
+        .split(",")
+        .map(coord => parseFloat(coord.trim()));
+      this.selectedCut = null;
+      this.coordinatesInput = "";
+      this.applyCoordinates([
+        coordinates[1],
+        coordinates[0],
+        coordinates[3],
+        coordinates[2]
+      ]);
+    },
+    applyCoordinates(coordinates) {
+      // allow only numbers
+      coordinates = coordinates.filter(c => Number(c) === c);
+      if (coordinates.length === 4) {
+        // draw line on map
+        this.openLayersMaps.forEach(m => {
+          m.getLayer("CUTTOOL")
+            .getSource()
+            .clear();
+        });
+        const cut = new Feature({
+          geometry: new LineString([
+            [coordinates[0], coordinates[1]],
+            [coordinates[2], coordinates[3]]
+          ]).transform("EPSG:4326", "EPSG:3857")
+        });
+        this.openLayersMaps.forEach(m => {
+          m.getLayer("CUTTOOL")
+            .getSource()
+            .addFeature(cut);
+        });
+
+        // draw diagram
+        this.$store.dispatch("fairwayprofile/cut", cut);
+      } else {
+        displayError({
+          title: this.$gettext("Invalid input"),
+          message: this.$gettext(
+            "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon"
+          )
+        });
+      }
+    },
+    saveCut() {
+      const previousCuts =
+        JSON.parse(localStorage.getItem("previousCuts")) || [];
+      const newEntry = {
+        label: this.cutLabel,
+        bottleneckName: this.selectedBottleneck,
+        coordinates: [...this.startPoint, ...this.endPoint],
+        timestamp: new Date().getTime()
+      };
+      const existingEntry = previousCuts.find(cut => {
+        return JSON.stringify(cut) === JSON.stringify(newEntry);
+      });
+      if (!existingEntry) previousCuts.push(newEntry);
+      if (previousCuts.length > 100) previousCuts.shift();
+      localStorage.setItem("previousCuts", JSON.stringify(previousCuts));
+      this.$store.dispatch("fairwayprofile/previousCuts");
+
+      this.showLabelInput = false;
+      displayInfo({
+        title: this.$gettext("Profile saved!"),
+        message: this.$gettext(
+          'You can now select these coordinates from the "Saved cross profiles" menu to restore this cross profile.'
+        )
+      });
+    },
+    deleteSelectedSurvey() {
+      const surveyText = `${this.selectedBottleneck}: ${lib.surveyDate(
+        this.selectedSurvey.date_info
+      )}`;
+      this.$store.commit("application/popup", {
+        icon: "trash",
+        title: this.$gettext("Delete survey"),
+        content:
+          `<small><b>` +
+          this.$gettext("Do you really want to delete the survey:") +
+          `</b><br>
+        ${surveyText}</small>`,
+        confirm: {
+          label: this.$gettext("Delete"),
+          icon: "trash",
+          callback: () => {
+            displayInfo({ title: this.$gettext("Not implemented") });
+          }
+        },
+        cancel: {
+          label: this.$gettext("Cancel"),
+          icon: "times"
+        }
+      });
+    },
+    deleteSelectedCut(cut) {
+      this.$store.commit("application/popup", {
+        icon: "trash",
+        title: this.$gettext("Delete cross profile"),
+        content:
+          `<small><b>` +
+          this.$gettext("Do you really want to delete the cross profile:") +
+          `</b><br>
+        ${cut.label}</small>`,
+        confirm: {
+          label: this.$gettext("Delete"),
+          icon: "trash",
+          callback: () => {
+            let previousCuts =
+              JSON.parse(localStorage.getItem("previousCuts")) || [];
+            previousCuts = previousCuts.filter(cut => {
+              return JSON.stringify(cut) !== JSON.stringify(this.selectedCut);
+            });
+            localStorage.setItem("previousCuts", JSON.stringify(previousCuts));
+            this.$store.commit("fairwayprofile/selectedCut", null);
+            this.$store.dispatch("fairwayprofile/previousCuts");
+            displayInfo({ title: this.$gettext("Profile deleted!") });
+          }
+        },
+        cancel: {
+          label: this.$gettext("Cancel"),
+          icon: "times"
+        }
+      });
+    },
+    moveToBottleneck() {
+      const bottleneck = this.bottlenecksList.find(
+        bn => bn.properties.name === this.selectedBottleneck
+      );
+      if (!bottleneck) return;
+      this.$store.dispatch("map/moveToFeauture", {
+        feature: bottleneck,
+        zoom: 17,
+        preventZoomOut: true
+      });
+    }
+  },
+  mounted() {
+    this.$store.dispatch("bottlenecks/loadBottlenecksList");
+  }
+};
+</script>
--- a/client/src/components/fairway/Profiles.vue	Thu Sep 05 16:55:40 2019 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,675 +0,0 @@
-<template>
-  <div
-    :class="[
-      'box ui-element rounded bg-white text-nowrap',
-      { expanded: showProfiles }
-    ]"
-  >
-    <div style="width: 18rem">
-      <UIBoxHeader
-        icon="chart-area"
-        :title="profilesLable"
-        :closeCallback="close"
-      />
-      <div class="box-body">
-        <UISpinnerOverlay v-if="surveysLoading || profileLoading" />
-        <select
-          @change="moveToBottleneck"
-          v-model="selectedBottleneck"
-          class="form-control font-weight-bold"
-        >
-          <option :value="null">
-            <translate>Select Bottleneck</translate>
-          </option>
-          <optgroup
-            v-for="(bottlenecksForCountry, cc) in orderedBottlenecks"
-            :key="cc"
-            :label="cc"
-          >
-            <option
-              v-for="bn in bottlenecksForCountry"
-              :key="bn.properties.id"
-              :value="bn.properties.name"
-            >
-              {{ bn.properties.name }}
-            </option>
-          </optgroup>
-        </select>
-        <div v-if="selectedBottleneck">
-          <div class="d-flex mt-2">
-            <div class="flex-fill" style="max-width: 75px;">
-              <small class="text-muted">
-                <translate>Waterlevel</translate>:
-              </small>
-              <select
-                v-model="selectedWaterLevel"
-                class="form-control form-control-sm small"
-              >
-                <option value="ref">
-                  <translate>Depth Reference</translate>
-                  <template v-if="selectedSurvey">
-                    ({{ selectedSurvey.depth_reference }}/{{
-                      $options.filters.waterlevel(
-                        selectedSurvey.waterlevel_value
-                      )
-                    }}
-                    m)
-                  </template>
-                </option>
-                <option value="current">
-                  <translate>Current Waterlevel</translate>
-                  <template v-if="bottleneck">
-                    ({{
-                      $options.filters.waterlevel(
-                        bottleneck.get("gm_waterlevel")
-                      )
-                    }}
-                    m)
-                  </template>
-                </option>
-              </select>
-            </div>
-            <div class="flex-fill ml-2">
-              <small class="text-muted"> <translate>Survey</translate>: </small>
-              <select
-                v-model="selectedSurvey"
-                class="form-control form-control-sm small"
-              >
-                <option
-                  v-for="survey in surveys"
-                  :key="survey.date_info"
-                  :value="survey"
-                  >{{ survey.date_info | surveyDate }}</option
-                >
-              </select>
-            </div>
-            <div
-              class="flex-fill ml-2"
-              v-if="selectedSurvey && surveys.length > 1"
-            >
-              <small class="text-muted mt-1">
-                <translate>Compare with</translate>:
-              </small>
-              <select
-                v-model="additionalSurvey"
-                class="form-control form-control-sm small"
-              >
-                <option :value="null">None</option>
-                <option
-                  v-for="survey in additionalSurveys"
-                  :key="survey.date_info"
-                  :value="survey"
-                  >{{ survey.date_info | surveyDate }}</option
-                >
-              </select>
-            </div>
-          </div>
-          <div class="mt-2 d-flex" v-if="additionalSurvey">
-            <button
-              v-if="differencesLoading"
-              class="btn btn-info btn-xs flex-fill"
-              disabled
-            >
-              <font-awesome-icon icon="spinner" spin class="mr-1" />
-              <translate>Calculating differences</translate>
-            </button>
-            <button
-              class="btn btn-info btn-xs flex-fill"
-              @click="differencesVisible ? showSurvey() : showDifferences()"
-              v-else
-            >
-              <translate v-if="differencesVisible" key="showsurvey"
-                >Show survey</translate
-              >
-              <translate v-else key="showdifferences"
-                >Show differences</translate
-              >
-            </button>
-            <button
-              v-if="!paneSetup.includes('FAIRWAYPROFILE')"
-              class="btn btn-info btn-xs ml-2"
-              @click="$store.commit('application/paneRotate')"
-              v-tooltip="rotatePanesTooltip"
-            >
-              <font-awesome-icon icon="redo" fixed-width />
-            </button>
-            <button
-              class="btn btn-info btn-xs ml-2"
-              @click="toggleSyncMaps()"
-              v-tooltip="syncMapsTooltip"
-            >
-              <font-awesome-icon
-                :icon="mapsAreSynced ? 'unlink' : 'link'"
-                fixed-width
-              />
-            </button>
-          </div>
-          <hr class="w-100 mb-0" />
-          <small class="text-muted d-block mt-2">
-            <translate>Saved cross profiles</translate>:
-          </small>
-          <div class="d-flex">
-            <select
-              :class="[
-                'form-control form-control-sm flex-fill',
-                { 'rounded-left-only': selectedCut }
-              ]"
-              v-model="selectedCut"
-            >
-              <option></option>
-              <option
-                v-for="(cut, index) in previousCuts"
-                :value="cut"
-                :key="index"
-                >{{ cut.label }}</option
-              >
-            </select>
-            <button
-              class="btn btn-sm btn-dark input-button-right"
-              @click="deleteSelectedCut(selectedCut)"
-              v-if="selectedCut"
-            >
-              <font-awesome-icon icon="trash" />
-            </button>
-          </div>
-          <small class="text-muted d-block mt-2">
-            <translate>Enter coordinates manually</translate>:
-          </small>
-          <div class="position-relative">
-            <input
-              class="form-control form-control-sm pr-5"
-              placeholder="Lat,Lon,Lat,Lon"
-              v-model="coordinatesInput"
-            />
-            <button
-              class="btn btn-sm btn-info position-absolute input-button-right"
-              @click="applyManualCoordinates"
-              style="top: 0; right: 0;"
-              v-if="coordinatesInputIsValid"
-            >
-              <font-awesome-icon icon="check" />
-            </button>
-          </div>
-          <small class="d-flex text-left mt-2" v-if="startPoint && endPoint">
-            <div class="text-nowrap mr-3">
-              <b> <translate>Start</translate>: </b> <br />
-              Lat: {{ startPoint[1] }} <br />
-              Lon: {{ startPoint[0] }}
-            </div>
-            <div class="text-nowrap">
-              <b>End:</b> <br />
-              Lat: {{ endPoint[1] }} <br />
-              Lon: {{ endPoint[0] }}
-            </div>
-            <button
-              v-clipboard:copy="coordinatesForClipboard"
-              v-clipboard:success="onCopyCoordinates"
-              class="btn btn-info btn-sm ml-auto mt-auto"
-            >
-              <font-awesome-icon icon="copy" />
-            </button>
-          </small>
-          <div class="d-flex mt-3">
-            <div
-              class="pr-3 w-50"
-              v-if="startPoint && endPoint && !selectedCut"
-            >
-              <button
-                class="btn btn-info btn-sm w-100"
-                @click="showLabelInput = !showLabelInput"
-              >
-                <font-awesome-icon :icon="showLabelInput ? 'times' : 'check'" />
-                {{ showLabelInput ? "Cancel" : "Save" }}
-              </button>
-            </div>
-            <div
-              :class="startPoint && endPoint && !selectedCut ? 'w-50' : 'w-100'"
-            >
-              <button
-                class="btn btn-info btn-sm w-100"
-                @click="toggleCutTool"
-                :disabled="!selectedSurvey"
-              >
-                <font-awesome-icon :icon="cutToolEnabled ? 'times' : 'plus'" />
-                {{ cutToolEnabled ? "Cancel" : "New" }}
-              </button>
-            </div>
-          </div>
-          <div v-if="showLabelInput" class="mt-2">
-            <small class="text-muted">
-              <translate>Enter label for cross profile</translate>:
-            </small>
-            <div class="position-relative">
-              <input
-                class="form-control form-control-sm pr-5"
-                v-model="cutLabel"
-              />
-              <button
-                class="btn btn-sm btn-info position-absolute input-button-right"
-                @click="saveCut"
-                v-if="cutLabel"
-                style="top: 0; right: 0;"
-              >
-                <font-awesome-icon icon="check" />
-              </button>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<style lang="scss" scoped>
-.input-button-right {
-  border-top-right-radius: $border-radius;
-  border-bottom-right-radius: $border-radius;
-  border-top-left-radius: 0 !important;
-  border-bottom-left-radius: 0 !important;
-}
-
-.rounded-left-only {
-  border-top-right-radius: 0 !important;
-  border-bottom-right-radius: 0 !important;
-  border-top-left-radius: $border-radius;
-  border-bottom-left-radius: $border-radius;
-}
-
-input,
-select {
-  font-size: 0.8em;
-}
-</style>
-
-<script>
-/* This is Free Software under GNU Affero General Public License v >= 3.0
- * without warranty, see README.md and license for details.
- *
- * SPDX-License-Identifier: AGPL-3.0-or-later
- * License-Filename: LICENSES/AGPL-3.0.txt
- *
- * Copyright (C) 2018 by via donau
- *   – Österreichische Wasserstraßen-Gesellschaft mbH
- * Software engineering by Intevation GmbH
- *
- * Author(s):
- * Markus Kottländer <markus.kottlaender@intevation.de>
- */
-import { mapState, mapGetters } from "vuex";
-import Feature from "ol/Feature";
-import LineString from "ol/geom/LineString";
-import { displayError, displayInfo } from "@/lib/errors";
-import { HTTP } from "@/lib/http";
-import { COMPARESURVEYS } from "@/components/paneSetups";
-
-export default {
-  name: "profiles",
-  data() {
-    return {
-      coordinatesInput: "",
-      cutLabel: "",
-      showLabelInput: false
-    };
-  },
-  computed: {
-    ...mapState("application", ["showProfiles", "paneSetup"]),
-    ...mapState("map", ["openLayersMaps", "syncedMaps", "cutToolEnabled"]),
-    ...mapState("bottlenecks", [
-      "bottlenecksList",
-      "surveys",
-      "surveysLoading"
-    ]),
-    ...mapState("fairwayprofile", [
-      "previousCuts",
-      "startPoint",
-      "endPoint",
-      "profileLoading",
-      "differencesLoading",
-      "waterLevels",
-      "currentProfile"
-    ]),
-    ...mapGetters("map", ["openLayersMap"]),
-    ...mapGetters("bottlenecks", ["orderedBottlenecks"]),
-    profilesLable() {
-      return this.$gettext("Bottleneck Surveys");
-    },
-    selectedBottleneck: {
-      get() {
-        return this.$store.state.bottlenecks.selectedBottleneck;
-      },
-      set(name) {
-        this.$store.dispatch("bottlenecks/setSelectedBottleneck", name);
-      }
-    },
-    selectedWaterLevel: {
-      get() {
-        return this.$store.state.fairwayprofile.selectedWaterLevel;
-      },
-      set(value) {
-        this.$store.commit("fairwayprofile/setSelectedWaterLevel", value);
-      }
-    },
-    selectedSurvey: {
-      get() {
-        return this.$store.state.bottlenecks.selectedSurvey;
-      },
-      set(survey) {
-        this.$store.commit("fairwayprofile/additionalSurvey", null);
-        this.$store.commit("bottlenecks/selectedSurvey", survey);
-      }
-    },
-    additionalSurvey: {
-      get() {
-        return this.$store.state.fairwayprofile.additionalSurvey;
-      },
-      set(survey) {
-        this.$store.commit("fairwayprofile/additionalSurvey", survey);
-      }
-    },
-    selectedCut: {
-      get() {
-        return this.$store.state.fairwayprofile.selectedCut;
-      },
-      set(cut) {
-        this.$store.commit("fairwayprofile/selectedCut", cut);
-        if (!cut) {
-          this.$store.commit("fairwayprofile/clearCurrentProfile");
-          this.openLayersMaps.forEach(m => {
-            m.getLayer("CUTTOOL")
-              .getSource()
-              .clear();
-          });
-        }
-      }
-    },
-    additionalSurveys() {
-      return this.surveys.filter(
-        survey => survey.date_info !== this.selectedSurvey.date_info
-      );
-    },
-    coordinatesForClipboard() {
-      return (
-        this.startPoint[1] +
-        "," +
-        this.startPoint[0] +
-        "," +
-        this.endPoint[1] +
-        "," +
-        this.endPoint[0]
-      );
-    },
-    coordinatesInputIsValid() {
-      const coordinates = this.coordinatesInput
-        .split(",")
-        .map(coord => parseFloat(coord.trim()))
-        .filter(c => Number(c) === c);
-      return coordinates.length === 4;
-    },
-    differencesVisible() {
-      return (
-        this.openLayersMap(COMPARESURVEYS.compare.id) &&
-        !this.openLayersMap(COMPARESURVEYS.compare.id)
-          .getLayer("BOTTLENECKISOLINE")
-          .getVisible() &&
-        this.openLayersMap(COMPARESURVEYS.compare.id)
-          .getLayer("DIFFERENCES")
-          .getVisible()
-      );
-    },
-    rotatePanesTooltip() {
-      return this.$gettext("Rotate Maps");
-    },
-    syncMapsTooltip() {
-      return this.$gettext(
-        this.mapsAreSynced ? "Unsynchronize Maps" : "Synchronize Maps"
-      );
-    },
-    mapsAreSynced() {
-      return this.syncedMaps.includes(COMPARESURVEYS.compare.id);
-    },
-    bottleneck() {
-      return this.openLayersMap()
-        ? this.openLayersMap()
-            .getLayer("BOTTLENECKS")
-            .getSource()
-            .getFeatures()
-            .find(f => f.get("objnam") === this.selectedBottleneck)
-        : null;
-    }
-  },
-  watch: {
-    selectedBottleneck() {
-      this.$store.dispatch("fairwayprofile/previousCuts");
-      this.cutLabel =
-        this.selectedBottleneck + " (" + new Date().toISOString() + ")";
-    },
-    selectedSurvey(survey) {
-      this.loadProfile(survey);
-    },
-    additionalSurvey(survey) {
-      if (survey) {
-        this.loadDifferences();
-        this.$store.commit(
-          "application/paneSetup",
-          Object.keys(this.currentProfile).length
-            ? "COMPARESURVEYS_FAIRWAYPROFILE"
-            : "COMPARESURVEYS"
-        );
-        this.$store.commit("map/syncedMaps", [COMPARESURVEYS.compare.id]);
-      } else {
-        this.$store.commit(
-          "application/paneSetup",
-          Object.keys(this.currentProfile).length ? "FAIRWAYPROFILE" : "DEFAULT"
-        );
-        this.$store.commit("map/syncedMaps", []);
-      }
-      this.loadProfile(survey);
-    },
-    selectedCut(cut) {
-      if (cut) {
-        this.applyCoordinates(cut.coordinates);
-      }
-    }
-  },
-  methods: {
-    toggleSyncMaps() {
-      if (this.mapsAreSynced) {
-        this.$store.commit(
-          "map/syncedMaps",
-          this.syncedMaps.filter(m => m !== COMPARESURVEYS.compare.id)
-        );
-      } else {
-        this.$store.commit("map/syncedMaps", [COMPARESURVEYS.compare.id]);
-      }
-    },
-    loadDifferences() {
-      this.$store.commit("fairwayprofile/setDifferencesLoading", true);
-      HTTP.post(
-        "/diff",
-        {
-          bottleneck: this.selectedSurvey.bottleneck_id,
-          minuend: this.selectedSurvey.date_info,
-          subtrahend: this.additionalSurvey.date_info
-        },
-        {
-          headers: {
-            "X-Gemma-Auth": localStorage.getItem("token")
-          }
-        }
-      )
-        .then()
-        .catch(error => {
-          let status, data, message;
-          if (error.response) {
-            status = error.response.status;
-            data = error.response.data;
-            message = `${status}: ${data.message || data}`;
-          } else {
-            message = error;
-          }
-          displayError({
-            title: this.$gettext("Backend Error"),
-            message: message
-          });
-        })
-        .finally(() => {
-          this.$store.commit("fairwayprofile/setDifferencesLoading", false);
-        });
-    },
-    showDifferences() {
-      this.openLayersMap(COMPARESURVEYS.compare.id)
-        .getLayer("BOTTLENECKISOLINE")
-        .setVisible(false);
-      this.openLayersMap(COMPARESURVEYS.compare.id)
-        .getLayer("DIFFERENCES")
-        .setVisible(true);
-    },
-    showSurvey() {
-      this.openLayersMap(COMPARESURVEYS.compare.id)
-        .getLayer("BOTTLENECKISOLINE")
-        .setVisible(true);
-      this.openLayersMap(COMPARESURVEYS.compare.id)
-        .getLayer("DIFFERENCES")
-        .setVisible(false);
-    },
-    close() {
-      this.$store.commit("application/showProfiles", false);
-    },
-    loadProfile(survey) {
-      if (survey) {
-        this.$store.commit("fairwayprofile/profileLoading", true);
-        this.$store
-          .dispatch("fairwayprofile/loadProfile", survey)
-          .finally(() => {
-            this.$store.commit("fairwayprofile/profileLoading", false);
-          });
-      }
-    },
-    toggleCutTool() {
-      this.$store.commit("map/cutToolEnabled", !this.cutToolEnabled);
-      this.$store.commit("map/lineToolEnabled", false);
-      this.$store.commit("map/polygonToolEnabled", false);
-      this.$store.commit("map/setCurrentMeasurement", null);
-    },
-    onCopyCoordinates() {
-      displayInfo({
-        message: this.$gettext("Coordinates copied to clipboard!")
-      });
-    },
-    applyManualCoordinates() {
-      const coordinates = this.coordinatesInput
-        .split(",")
-        .map(coord => parseFloat(coord.trim()));
-      this.selectedCut = null;
-      this.coordinatesInput = "";
-      this.applyCoordinates([
-        coordinates[1],
-        coordinates[0],
-        coordinates[3],
-        coordinates[2]
-      ]);
-    },
-    applyCoordinates(coordinates) {
-      // allow only numbers
-      coordinates = coordinates.filter(c => Number(c) === c);
-      if (coordinates.length === 4) {
-        // draw line on map
-        this.openLayersMaps.forEach(m => {
-          m.getLayer("CUTTOOL")
-            .getSource()
-            .clear();
-        });
-        const cut = new Feature({
-          geometry: new LineString([
-            [coordinates[0], coordinates[1]],
-            [coordinates[2], coordinates[3]]
-          ]).transform("EPSG:4326", "EPSG:3857")
-        });
-        this.openLayersMaps.forEach(m => {
-          m.getLayer("CUTTOOL")
-            .getSource()
-            .addFeature(cut);
-        });
-
-        // draw diagram
-        this.$store.dispatch("fairwayprofile/cut", cut);
-      } else {
-        displayError({
-          title: this.$gettext("Invalid input"),
-          message: this.$gettext(
-            "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon"
-          )
-        });
-      }
-    },
-    saveCut() {
-      const previousCuts =
-        JSON.parse(localStorage.getItem("previousCuts")) || [];
-      const newEntry = {
-        label: this.cutLabel,
-        bottleneckName: this.selectedBottleneck,
-        coordinates: [...this.startPoint, ...this.endPoint],
-        timestamp: new Date().getTime()
-      };
-      const existingEntry = previousCuts.find(cut => {
-        return JSON.stringify(cut) === JSON.stringify(newEntry);
-      });
-      if (!existingEntry) previousCuts.push(newEntry);
-      if (previousCuts.length > 100) previousCuts.shift();
-      localStorage.setItem("previousCuts", JSON.stringify(previousCuts));
-      this.$store.dispatch("fairwayprofile/previousCuts");
-
-      this.showLabelInput = false;
-      displayInfo({
-        title: this.$gettext("Profile saved!"),
-        message: this.$gettext(
-          'You can now select these coordinates from the "Saved cross profiles" menu to restore this cross profile.'
-        )
-      });
-    },
-    deleteSelectedCut(cut) {
-      this.$store.commit("application/popup", {
-        icon: "trash",
-        title: this.$gettext("Delete cross profile"),
-        content:
-          this.$gettext("Do you really want to delete the cross profile:") +
-          `<br>
-        <b>${cut.label}</b>`,
-        confirm: {
-          label: this.$gettext("Delete"),
-          icon: "trash",
-          callback: () => {
-            let previousCuts =
-              JSON.parse(localStorage.getItem("previousCuts")) || [];
-            previousCuts = previousCuts.filter(cut => {
-              return JSON.stringify(cut) !== JSON.stringify(this.selectedCut);
-            });
-            localStorage.setItem("previousCuts", JSON.stringify(previousCuts));
-            this.$store.commit("fairwayprofile/selectedCut", null);
-            this.$store.dispatch("fairwayprofile/previousCuts");
-            displayInfo({ title: this.$gettext("Profile deleted!") });
-          }
-        },
-        cancel: {
-          label: this.$gettext("Cancel"),
-          icon: "times"
-        }
-      });
-    },
-    moveToBottleneck() {
-      const bottleneck = this.bottlenecksList.find(
-        bn => bn.properties.name === this.selectedBottleneck
-      );
-      if (!bottleneck) return;
-      this.$store.dispatch("map/moveToFeauture", {
-        feature: bottleneck,
-        zoom: 17,
-        preventZoomOut: true
-      });
-    }
-  },
-  mounted() {
-    this.$store.dispatch("bottlenecks/loadBottlenecksList");
-  }
-};
-</script>
--- a/client/src/components/importoverview/FairwayDimensionDetail.vue	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/importoverview/FairwayDimensionDetail.vue	Thu Sep 05 17:02:03 2019 +0200
@@ -16,5 +16,70 @@
  * Author(s):
  * Thomas Junk <thomas.junk@intevation.de>
  */
-export default {};
+import { HTTP } from "@/lib/http";
+import { WFS } from "ol/format";
+import { or as orFilter, equalTo as equalToFilter } from "ol/format/filter";
+//import { displayError } from "@/lib/errors";
+import { mapGetters } from "vuex";
+import Feature from "ol/Feature";
+import Polygon from "ol/geom/Polygon";
+
+const getFromWFS = (type, filter) => {
+  return new Promise((resolve, reject) => {
+    var featureCollectionRequest = new WFS().writeGetFeature({
+      srsName: "EPSG:4326",
+      featureNS: "gemma",
+      featurePrefix: "gemma",
+      featureTypes: [type],
+      outputFormat: "application/json",
+      filter: filter
+    });
+    HTTP.post(
+      "/internal/wfs",
+      new XMLSerializer().serializeToString(featureCollectionRequest),
+      {
+        headers: {
+          "X-Gemma-Auth": localStorage.getItem("token"),
+          "Content-type": "text/xml; charset=UTF-8"
+        }
+      }
+    )
+      .then(response => {
+        resolve(response);
+      })
+      .catch(error => {
+        reject(error);
+      });
+  });
+};
+
+export default {
+  props: ["summary"],
+  mounted() {
+    const ids = this.fairWayDimensionIDs.map(id => {
+      return equalToFilter("id", id);
+    });
+    getFromWFS("fairway_dimensions", orFilter(...ids)).then(response => {
+      let { features } = response.data;
+      const fairwaydimensionLayer = this.openLayersMap().getLayer(
+        "FDREVIEWLAYER"
+      );
+      features = features.map(f => {
+        let result = new Feature({
+          geometry: new Polygon(f.geometry.coordinates)
+        });
+        result.setId(f.id);
+        return result;
+      });
+      fairwaydimensionLayer.setVisible(true);
+      fairwaydimensionLayer.getSource().addFeatures(features);
+    });
+  },
+  computed: {
+    ...mapGetters("map", ["openLayersMap"]),
+    fairWayDimensionIDs() {
+      return this.summary["fd-area"].map(e => e.id);
+    }
+  }
+};
 </script>
--- a/client/src/components/importoverview/LogDetail.vue	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/importoverview/LogDetail.vue	Thu Sep 05 17:02:03 2019 +0200
@@ -35,7 +35,7 @@
       v-if="entry.id === showAdditional && isPending && (isFD || isAGM || isBN)"
       class="d-flex border-bottom"
     >
-      <FairwayDimensionDetail v-if="isFD" />
+      <FairwayDimensionDetail :summary="details.summary" v-if="isFD" />
       <ApprovedGaugeMeasurementDetail v-if="isAGM" />
       <BottleneckDetail :entry="entry" v-if="isBN" />
     </div>
--- a/client/src/components/layers/LegendElement.vue	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/layers/LegendElement.vue	Thu Sep 05 17:02:03 2019 +0200
@@ -113,7 +113,7 @@
           `&legend_options=columns:4;fontAntiAliasing:true`;
       } else {
         this.url =
-          `/internal/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=` +
+          `/internal/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&SCALE=80000&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=` +
           this.layer.getSource().getParams().LAYERS +
           `&legend_options=columns:1;fontAntiAliasing:true;forceLabels:off`;
       }
--- a/client/src/components/map/layers.js	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/map/layers.js	Thu Sep 05 17:02:03 2019 +0200
@@ -180,6 +180,13 @@
   // Shared feature source for layers:
   // BOTTLENECKS, BOTTLENECKSTATUS and BOTTLENECKFAIRWAYAVAILABILITY
   // Reduces bottlenecks_geoserver requests and number of stored feature objects.
+  const FDREVIEWLAYER = new VectorLayer({
+    id: "FDREVIEWLAYER",
+    label: "Review",
+    visible: true,
+    source: new VectorSource(),
+    style: styles.sections
+  });
   const bottlenecksSource = new VectorSource({ strategy: bboxStrategy });
   bottlenecksSource.setLoader(
     buildVectorLoader(
@@ -637,7 +644,8 @@
           });
         })(),
         DRAWLAYER,
-        CUTLAYER
+        CUTLAYER,
+        FDREVIEWLAYER
       ];
 
   layerConfigs[mapId] = config;
--- a/client/src/components/map/styles.js	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/map/styles.js	Thu Sep 05 17:02:03 2019 +0200
@@ -221,22 +221,25 @@
       }
       if (feature.get("fa_critical") && feature.get("fa_data")) {
         let data = feature.get("fa_data");
-        let lnwlHeight = (80 / 100) * data.ldc;
-        let belowThresholdHeight = (80 / 100) * data.below;
-        let betweenThresholdHeight = (80 / 100) * data.between;
-        let aboveThresholdHeight = (80 / 100) * data.above;
-
+        const heightInPixel = 82;
+        const relativeHeightInPercent = heightInPixel / 100;
+        let lnwlHeight = relativeHeightInPercent * data.ldc;
+        let belowThresholdHeight = relativeHeightInPercent * data.below;
+        let betweenThresholdHeight = relativeHeightInPercent * data.between;
+        let aboveThresholdHeight = relativeHeightInPercent * data.above;
+        let lnwl = `<rect x='2' y='${heightInPixel -
+          lnwlHeight}' width='10' height='${lnwlHeight}' stroke-width='0' fill='aqua'/>`;
+        let above = `<rect x='12' y='${heightInPixel -
+          aboveThresholdHeight}' width='18' height='${aboveThresholdHeight}' stroke-width='0' fill='blue'/>`;
+        let between = `<rect x='12' y='${heightInPixel -
+          aboveThresholdHeight -
+          betweenThresholdHeight}' width='18' height='${betweenThresholdHeight}' stroke-width='0' fill='darksalmon'/>`;
+        let below = `<rect x='12' y='${heightInPixel -
+          aboveThresholdHeight -
+          betweenThresholdHeight -
+          belowThresholdHeight}' width='18' height='${belowThresholdHeight}' stroke-width='0' fill='hotpink'/>`;
         let frame = `<rect x='0' y='0' width='32' height='84' stroke-width='0' fill='white'/>`;
-        let lnwl = `<rect x='2' y='${80 -
-          lnwlHeight +
-          2}' width='10' height='${lnwlHeight}' stroke-width='0' fill='aqua'/>`;
-        let range1 = `<rect x='12' y='2' width='18' height='${belowThresholdHeight}' stroke-width='0' fill='hotpink'/>`;
-        let range2 = `<rect x='12' y='${belowThresholdHeight +
-          2}' width='18' height='${betweenThresholdHeight}' stroke-width='0' fill='darksalmon'/>`;
-        let range3 = `<rect x='12' y='${80 -
-          aboveThresholdHeight +
-          2}' width='18' height='${aboveThresholdHeight}' stroke-width='0' fill='blue'/>`;
-        let svg = `data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='32' height='84'><g>${frame}${lnwl}${range1}${range2}${range3}</g></svg>`;
+        let svg = `data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='32' height='84'><g>${frame}${lnwl}${above}${between}${below}</g></svg>`;
         let bnCenter = getCenter(feature.getGeometry().getExtent());
         s.push(
           new Style({
--- a/client/src/components/stretches/Stretches.vue	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/stretches/Stretches.vue	Thu Sep 05 17:02:03 2019 +0200
@@ -48,6 +48,12 @@
                 />
               </button>
               <button
+                class="btn btn-xs btn-dark mr-2"
+                @click="download(stretch)"
+              >
+                <font-awesome-icon icon="download" fixed-width />
+              </button>
+              <button
                 class="btn btn-xs btn-dark"
                 @click="deleteStretch(stretch)"
               >
@@ -99,6 +105,7 @@
 import { displayError, displayInfo } from "@/lib/errors";
 import { HTTP } from "@/lib/http";
 import { sortTable } from "@/lib/mixins";
+import { format } from "date-fns";
 
 export default {
   mixins: [sortTable],
@@ -134,6 +141,23 @@
     }
   },
   methods: {
+    download(stretch) {
+      const { name } = stretch.properties;
+      HTTP.get(`/data/stretch/shape/${name}`, {
+        responseType: "blob",
+        headers: {
+          "X-Gemma-Auth": localStorage.getItem("token")
+        }
+      }).then(response => {
+        const link = document.createElement("a");
+        const now = new Date();
+        link.href = window.URL.createObjectURL(response.data);
+        link.download = `${name}-${format(now, "YYYY-mm-DD")}.zip`;
+        document.body.appendChild(link);
+        link.click();
+        document.body.removeChild(link);
+      });
+    },
     filteredStretches() {
       return this.stretches.filter(s => {
         return (s.properties.name + s.properties.source_organization)
--- a/client/src/components/systemconfiguration/ColorSettings.vue	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/components/systemconfiguration/ColorSettings.vue	Thu Sep 05 17:02:03 2019 +0200
@@ -26,7 +26,12 @@
               <div class="card-body p-0">
                 <chrome-picker
                   v-model="f.strokeColor"
-                  :class="{ hide: f.noOpacity }"
+                  :class="{
+                    hide:
+                      f.noOpacity ||
+                      f.name === 'Distance Marks' ||
+                      f.name === 'Distance Marks, Axis'
+                  }"
                 />
               </div>
             </div>
@@ -144,14 +149,12 @@
         {
           name: "Distance Marks, Axis",
           strokeColor: initSColor,
-          fillColor: initSColor,
-          noOpacity: true
+          fillColor: initSColor
         },
         {
           name: "Distance Marks",
           strokeColor: initSColor,
-          fillColor: initSColor,
-          noOpacity: true
+          fillColor: initSColor
         },
         {
           name: "Waterway profiles",
@@ -258,12 +261,7 @@
         fillC = feature.fillColor
           ? feature.fillColor.hex8 || feature.fillColor
           : initFColor;
-      // Now we do not handle alpha-color value for WMS-Layers
-      // ToDo: implementation in front-backend.
-      let strokeCForWMS = feature.strokeColor.hex || feature.strokeColor,
-        fillCForWMS = feature.fillColor
-          ? feature.fillColor.hex || feature.fillColor
-          : initFColor;
+      let strokeCForWMS = feature.strokeColor.hex || feature.strokeColor;
       let noChangeMsg = name => {
         displayInfo({
           title: name + ":",
@@ -413,12 +411,12 @@
         case "Distance Marks, Axis": {
           if (
             strokeCForWMS !== this.config.distance_marks_stroke ||
-            fillCForWMS !== this.config.distance_marks_fill
+            fillC !== this.config.distance_marks_fill
           ) {
             this.$store
               .dispatch("application/saveConfig", {
                 distance_marks_stroke: strokeCForWMS,
-                distance_marks_fill: fillCForWMS
+                distance_marks_fill: fillC
               })
               .finally(() => this.$store.dispatch("application/loadConfig"));
           } else {
@@ -429,12 +427,12 @@
         case "Distance Marks": {
           if (
             strokeCForWMS !== this.config.distance_marks_ashore_stroke ||
-            fillCForWMS !== this.config.distance_marks_ashore_fill
+            fillC !== this.config.distance_marks_ashore_fill
           ) {
             this.$store
               .dispatch("application/saveConfig", {
                 distance_marks_ashore_stroke: strokeCForWMS,
-                distance_marks_ashore_fill: fillCForWMS
+                distance_marks_ashore_fill: fillC
               })
               .finally(() => this.$store.dispatch("application/loadConfig"));
           } else {
--- a/client/src/locale/bg_BG/LC_MESSAGES/app.po	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/locale/bg_BG/LC_MESSAGES/app.po	Thu Sep 05 17:02:03 2019 +0200
@@ -91,6 +91,10 @@
 msgid "Accesslog"
 msgstr ""
 
+#: src/components/identify/Identify.vue:59
+msgid "According gauge data:"
+msgstr ""
+
 #: src/components/usermanagement/Userdetail.vue:242
 #: src/components/usermanagement/Usermanagement.vue:82
 msgid "Add User"
@@ -112,7 +116,7 @@
 msgid "April"
 msgstr ""
 
-#: src/store/map.js:207
+#: src/store/map.js:214
 msgid "Area"
 msgstr "Район"
 
@@ -124,6 +128,18 @@
 msgid "August"
 msgstr ""
 
+#: src/components/identify/Identify.vue:324
+msgid "Avail: Below treshold"
+msgstr ""
+
+#: src/components/identify/Identify.vue:321
+msgid "Avail: Last measurement <"
+msgstr ""
+
+#: src/components/identify/Identify.vue:327
+msgid "Avail: Latest measurement older than"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:61
 msgid "Availability of Gauge Measurements"
 msgstr ""
@@ -170,7 +186,7 @@
 #: src/components/gauge/HydrologicalConditions.vue:237
 #: src/components/gauge/HydrologicalConditions.vue:1040
 #: src/components/gauge/Waterlevel.vue:240
-#: src/components/gauge/Waterlevel.vue:1164
+#: src/components/gauge/Waterlevel.vue:1178
 #: src/components/importconfiguration/Import.vue:130
 #: src/components/importconfiguration/Import.vue:147
 #: src/components/importconfiguration/Import.vue:166
@@ -193,15 +209,15 @@
 #: src/components/importoverview/LogEntry.vue:160
 #: src/components/importoverview/SectionDetails.vue:109
 #: src/components/importoverview/StretchDetails.vue:113
-#: src/components/layers/Layerselect.vue:137 src/components/map/Map.vue:203
+#: src/components/layers/Layerselect.vue:158 src/components/map/Map.vue:213
 #: src/components/sections/SectionForm.vue:339
-#: src/components/sections/Sections.vue:179
-#: src/components/sections/Sections.vue:189
-#: src/components/sections/Sections.vue:231
+#: src/components/sections/Sections.vue:170
+#: src/components/sections/Sections.vue:180
+#: src/components/sections/Sections.vue:222
 #: src/components/stretches/StretchForm.vue:362
-#: src/components/stretches/Stretches.vue:179
-#: src/components/stretches/Stretches.vue:189
-#: src/components/stretches/Stretches.vue:241
+#: src/components/stretches/Stretches.vue:170
+#: src/components/stretches/Stretches.vue:180
+#: src/components/stretches/Stretches.vue:232
 #: src/components/systemconfiguration/PDFTemplates.vue:165
 #: src/components/systemconfiguration/PDFTemplates.vue:254
 #: src/components/systemconfiguration/PDFTemplates.vue:292
@@ -248,7 +264,7 @@
 #: src/components/fairway/Profiles.vue:654
 #: src/components/importconfiguration/Import.vue:204
 #: src/components/importoverview/ImportOverview.vue:447
-#: src/components/stretches/Stretches.vue:215
+#: src/components/stretches/Stretches.vue:206
 #: src/components/systemconfiguration/PDFTemplates.vue:331
 #: src/components/usermanagement/Usermanagement.vue:268
 msgid "Cancel"
@@ -263,7 +279,7 @@
 msgid "Choose a distance mark by clicking on the map."
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:275
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:294
 msgid "Choose color"
 msgstr ""
 
@@ -291,6 +307,14 @@
 msgid "Compare with"
 msgstr ""
 
+#: src/components/identify/Identify.vue:343
+msgid "Confidence per 24h"
+msgstr ""
+
+#: src/components/identify/Identify.vue:342
+msgid "Confidence per 72h"
+msgstr ""
+
 #: src/components/Sidebar.vue:65
 msgid "Configuration"
 msgstr ""
@@ -323,11 +347,6 @@
 msgid "Cronstring"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:6
-#, fuzzy
-msgid "Currency of Bottleneck Surveys"
-msgstr "Критични участъци"
-
 #: src/components/fairway/Profiles.vue:59
 msgid "Current Waterlevel"
 msgstr ""
@@ -336,21 +355,21 @@
 msgid "Data Availability/Accuracy"
 msgstr ""
 
-#: src/components/identify/Identify.vue:194
-msgid "Data too old. Treshold: "
+#: src/components/identify/Identify.vue:360
+msgid "Data too old. Treshold:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:191
-msgid "Data within revisiting treshold "
+#: src/components/identify/Identify.vue:357
+msgid "Data within revisiting treshold"
 msgstr ""
 
-#: src/components/identify/Identify.vue:189
+#: src/components/identify/Identify.vue:355
 msgid "Data within the revisiting time"
 msgstr ""
 
 #: src/components/importconfiguration/types/Soundingresults.vue:94
-#: src/components/sections/Sections.vue:136
-#: src/components/stretches/Stretches.vue:136
+#: src/components/sections/Sections.vue:127
+#: src/components/stretches/Stretches.vue:127
 #: src/components/systemconfiguration/PDFTemplates.vue:120
 msgid "Date"
 msgstr ""
@@ -392,7 +411,7 @@
 msgid "Define sections"
 msgstr ""
 
-#: src/components/sections/Sections.vue:130
+#: src/components/sections/Sections.vue:121
 msgid "Define Sections"
 msgstr ""
 
@@ -400,13 +419,13 @@
 msgid "Define stretches"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:130
+#: src/components/stretches/Stretches.vue:121
 msgid "Define Stretches"
 msgstr ""
 
 #: src/components/fairway/Profiles.vue:639
 #: src/components/importconfiguration/Import.vue:182
-#: src/components/stretches/Stretches.vue:205
+#: src/components/stretches/Stretches.vue:196
 #: src/components/systemconfiguration/PDFTemplates.vue:308
 #: src/components/usermanagement/Usermanagement.vue:242
 msgid "Delete"
@@ -420,7 +439,7 @@
 msgid "Delete Import"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:197
+#: src/components/stretches/Stretches.vue:188
 msgid "Delete Stretch"
 msgstr ""
 
@@ -448,8 +467,8 @@
 msgid "deleted successfully"
 msgstr ""
 
-#: src/components/sections/Sections.vue:206
-#: src/components/stretches/Stretches.vue:210
+#: src/components/sections/Sections.vue:197
+#: src/components/stretches/Stretches.vue:201
 msgid "Deleting "
 msgstr ""
 
@@ -477,11 +496,11 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/identify/formatter.js:62
+#: src/components/identify/formatter.js:68
 msgid "Distance Mark"
 msgstr ""
 
-#: src/components/identify/formatter.js:65
+#: src/components/identify/formatter.js:71
 msgid "Distance Mark ashore"
 msgstr ""
 
@@ -509,11 +528,11 @@
 msgid "Do you really want to delete the import with ID"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:199
+#: src/components/stretches/Stretches.vue:190
 msgid "Do you really want to delete this stretch:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:76
+#: src/components/identify/Identify.vue:130
 msgid "Download"
 msgstr ""
 
@@ -689,15 +708,15 @@
 msgid "G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:96
+#: src/components/identify/formatter.js:102
 msgid "Gauge"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:195
+msgid "Gauge Forecast Confidence"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:124
-msgid "Gauge Forecast Confidence"
-msgstr ""
-
-#: src/components/systemconfiguration/DataAccuracy.vue:197
 msgid "Gauge Forecast vs. Reality"
 msgstr ""
 
@@ -726,10 +745,14 @@
 msgid "Generated by"
 msgstr ""
 
-#: src/components/identify/Identify.vue:106
+#: src/components/identify/Identify.vue:160
 msgid "Generated PDFs use font:"
 msgstr ""
 
+#: src/components/identify/Identify.vue:340
+msgid "Highest confidence"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1062
 msgid "hour"
 msgstr ""
@@ -756,7 +779,7 @@
 msgid "ID"
 msgstr ""
 
-#: src/components/identify/Identify.vue:179 src/components/map/MapPopup.vue:148
+#: src/components/identify/Identify.vue:240 src/components/map/MapPopup.vue:148
 #: src/components/toolbar/Identify.vue:49
 msgid "Identified Features"
 msgstr ""
@@ -864,11 +887,11 @@
 msgid "Latest Measurement"
 msgstr ""
 
-#: src/components/identify/formatter.js:100
+#: src/components/identify/formatter.js:106
 msgid "Latest Waterlevel"
 msgstr ""
 
-#: src/components/identify/formatter.js:99
+#: src/components/identify/formatter.js:105
 msgid "Latest Waterlevel Date"
 msgstr ""
 
@@ -877,7 +900,7 @@
 msgid "Layers"
 msgstr "Слоеве"
 
-#: src/store/map.js:180
+#: src/store/map.js:187
 msgid "Length"
 msgstr ""
 
@@ -946,7 +969,7 @@
 msgid "Measurement"
 msgstr ""
 
-#: src/components/identify/formatter.js:102
+#: src/components/identify/formatter.js:108
 msgid "Measurement Count in Last 14 Days"
 msgstr ""
 
@@ -954,13 +977,13 @@
 msgid "measurements in the last 14 days."
 msgstr ""
 
-#: src/components/identify/formatter.js:79
-#: src/components/identify/formatter.js:90
+#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:96
 msgid "Min. G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:77
-#: src/components/identify/formatter.js:88
+#: src/components/identify/formatter.js:83
+#: src/components/identify/formatter.js:94
 msgid "Min. Gauge Waterlevel Date"
 msgstr ""
 
@@ -990,13 +1013,27 @@
 
 #: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:6
 #: src/components/identify/formatter.js:7
-#: src/components/sections/Sections.vue:133
-#: src/components/stretches/Stretches.vue:133
+#: src/components/sections/Sections.vue:124
+#: src/components/stretches/Stretches.vue:124
 #: src/components/systemconfiguration/PDFTemplates.vue:117
 #, fuzzy
 msgid "Name"
 msgstr "име"
 
+#: src/components/identify/Identify.vue:252
+#: src/components/identify/Identify.vue:253
+#: src/components/identify/Identify.vue:254
+#: src/components/identify/Identify.vue:266
+#: src/components/identify/Identify.vue:267
+#: src/components/identify/Identify.vue:268
+msgid "Nash-Sutcliffe"
+msgstr ""
+
+#: src/components/identify/Identify.vue:255
+#: src/components/identify/Identify.vue:269
+msgid "Nash-Sutcliffe not available"
+msgstr ""
+
 #: src/components/sections/SectionForm.vue:131
 #: src/components/stretches/StretchForm.vue:148
 msgid "National Object name"
@@ -1019,11 +1056,11 @@
 msgid "New import"
 msgstr ""
 
-#: src/components/sections/Sections.vue:75
+#: src/components/sections/Sections.vue:66
 msgid "New section"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:75
+#: src/components/stretches/Stretches.vue:66
 msgid "New stretch"
 msgstr ""
 
@@ -1037,7 +1074,7 @@
 msgid "No data available."
 msgstr ""
 
-#: src/components/identify/Identify.vue:68
+#: src/components/identify/Identify.vue:122
 msgid "No features identified."
 msgstr ""
 
@@ -1049,7 +1086,7 @@
 msgid "No style-changes"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:209
+#: src/components/stretches/Stretches.vue:200
 msgid "Not implemented"
 msgstr ""
 
@@ -1058,7 +1095,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:630
-#: src/components/gauge/Waterlevel.vue:725
+#: src/components/gauge/Waterlevel.vue:735
 msgid "Now"
 msgstr ""
 
@@ -1312,6 +1349,11 @@
 msgid "quarterly"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:6
+#, fuzzy
+msgid "Recency of Bottleneck Surveys"
+msgstr "Критични участъци"
+
 #: src/components/Pdftool.vue:722
 msgid "Ref gauge"
 msgstr ""
@@ -1343,8 +1385,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:44
 #: src/components/systemconfiguration/DataAccuracy.vue:274
 #: src/components/systemconfiguration/MapLayers.vue:58
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:97
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:198
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:101
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:208
 msgid "Reset to defaults"
 msgstr ""
 
@@ -1360,8 +1402,8 @@
 msgid "retryDescription"
 msgstr ""
 
-#: src/components/sections/Sections.vue:142
-#: src/components/stretches/Stretches.vue:142
+#: src/components/sections/Sections.vue:133
+#: src/components/stretches/Stretches.vue:133
 msgid "Review pending import"
 msgstr ""
 
@@ -1374,6 +1416,10 @@
 msgid "Rotate Maps"
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:312
+msgid "Same value is used in multiple fields.  Please check"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1074
 msgid "Saturday"
 msgstr ""
@@ -1408,7 +1454,7 @@
 msgid "Scheduled"
 msgstr ""
 
-#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:91
 msgid "Section"
 msgstr ""
 
@@ -1441,8 +1487,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:38
 #: src/components/systemconfiguration/DataAccuracy.vue:271
 #: src/components/systemconfiguration/MapLayers.vue:55
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:91
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:192
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:95
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:202
 msgid "Send"
 msgstr ""
 
@@ -1482,7 +1528,7 @@
 msgid "Simple"
 msgstr ""
 
-#: src/components/identify/Identify.vue:93
+#: src/components/identify/Identify.vue:147
 msgid ""
 "Some data ©\n"
 "        <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n"
@@ -1501,7 +1547,7 @@
 msgid "Sounding Result"
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:102
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:109
 msgid "Sounding Result Comparison"
 msgstr ""
 
@@ -1509,8 +1555,8 @@
 msgid "Soundingresults"
 msgstr ""
 
-#: src/components/sections/Sections.vue:139
-#: src/components/stretches/Stretches.vue:139
+#: src/components/sections/Sections.vue:130
+#: src/components/stretches/Stretches.vue:130
 msgid "Source organization"
 msgstr ""
 
@@ -1524,11 +1570,11 @@
 msgid "Source orgranization"
 msgstr ""
 
-#: src/components/identify/Identify.vue:90
+#: src/components/identify/Identify.vue:144
 msgid "source-code"
 msgstr ""
 
-#: src/components/sections/Sections.vue:205
+#: src/components/sections/Sections.vue:196
 msgid "Staging Area"
 msgstr ""
 
@@ -1561,7 +1607,7 @@
 msgid "Status"
 msgstr ""
 
-#: src/components/identify/formatter.js:74
+#: src/components/identify/formatter.js:80
 msgid "Stretch"
 msgstr ""
 
@@ -1616,7 +1662,7 @@
 msgid "Testmail sent"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:132
+#: src/components/systemconfiguration/DataAccuracy.vue:203
 msgid ""
 "The highest confidence value is less than\n"
 "                <b>%{gm24} cm</b>\n"
@@ -1625,13 +1671,13 @@
 "                within last 72 hours."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:177
+#: src/components/systemconfiguration/DataAccuracy.vue:248
 msgid ""
 "The highest confidence value within the last 24 hours is\n"
 "                  greater than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:155
+#: src/components/systemconfiguration/DataAccuracy.vue:226
 msgid ""
 "The highest confidence value within the last 72 hours is\n"
 "                  greater than"
@@ -1664,19 +1710,19 @@
 "                respective bottleneck."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:250
+#: src/components/systemconfiguration/DataAccuracy.vue:177
 msgid ""
 "The Nash-Sutcliffe coefficient for last 24 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:230
+#: src/components/systemconfiguration/DataAccuracy.vue:157
 msgid ""
 "The Nash-Sutcliffe coefficient for last 72 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:205
+#: src/components/systemconfiguration/DataAccuracy.vue:132
 msgid ""
 "The Nash-Sutcliffe coefficient is greater than\n"
 "                <b>%{nsc24}</b>\n"
@@ -1689,6 +1735,10 @@
 msgid "The provided template has no name property."
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:331
+msgid "There are invalid classbreak values. Please check"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:88
 msgid "There are less than"
 msgstr ""
@@ -1700,11 +1750,11 @@
 #: src/components/fairway/Profiles.vue:423
 #: src/components/importconfiguration/types/Soundingresults.vue:232
 #: src/components/importconfiguration/types/Soundingresults.vue:251
-#: src/components/layers/Layerselect.vue:67
+#: src/components/layers/Layerselect.vue:68
 msgid "this"
 msgstr ""
 
-#: src/components/identify/Identify.vue:84
+#: src/components/identify/Identify.vue:138
 msgid ""
 "This app uses <i>gemma</i>, which is Free Software under <br/>\n"
 "        %{ license } without warranty, see docs for details."
@@ -1792,8 +1842,8 @@
 msgid "URL"
 msgstr ""
 
-#: src/components/identify/Identify.vue:80
-#: src/components/identify/Identify.vue:182
+#: src/components/identify/Identify.vue:134
+#: src/components/identify/Identify.vue:243
 msgid "User Manual"
 msgstr ""
 
@@ -1810,7 +1860,7 @@
 msgid "Users"
 msgstr ""
 
-#: src/components/identify/Identify.vue:99
+#: src/components/identify/Identify.vue:153
 msgid ""
 "Uses\n"
 "        <a href=\"https://download.geonames.org/export/dump/readme.txt"
@@ -1836,7 +1886,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:663
-#: src/components/gauge/Waterlevel.vue:611
+#: src/components/gauge/Waterlevel.vue:613
 msgid "Waterlevel [m]"
 msgstr ""
 
@@ -1857,7 +1907,7 @@
 msgid "Waterway area"
 msgstr ""
 
-#: src/components/identify/formatter.js:59
+#: src/components/identify/formatter.js:65
 msgid "Waterway Area"
 msgstr ""
 
@@ -1865,7 +1915,7 @@
 msgid "Waterway axis"
 msgstr ""
 
-#: src/components/identify/formatter.js:68
+#: src/components/identify/formatter.js:74
 msgid "Waterway Axis"
 msgstr ""
 
@@ -1873,7 +1923,7 @@
 msgid "Waterway gauges"
 msgstr ""
 
-#: src/components/identify/formatter.js:71
+#: src/components/identify/formatter.js:77
 msgid "Waterway Profile"
 msgstr ""
 
--- a/client/src/locale/de_AT/LC_MESSAGES/app.po	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/locale/de_AT/LC_MESSAGES/app.po	Thu Sep 05 17:02:03 2019 +0200
@@ -92,6 +92,10 @@
 msgid "Accesslog"
 msgstr "Zugriffs-Protokoll"
 
+#: src/components/identify/Identify.vue:59
+msgid "According gauge data:"
+msgstr ""
+
 #: src/components/usermanagement/Userdetail.vue:242
 #: src/components/usermanagement/Usermanagement.vue:82
 msgid "Add User"
@@ -114,7 +118,7 @@
 msgid "April"
 msgstr "April"
 
-#: src/store/map.js:207
+#: src/store/map.js:214
 msgid "Area"
 msgstr "Fläche"
 
@@ -126,6 +130,20 @@
 msgid "August"
 msgstr "August"
 
+#: src/components/identify/Identify.vue:324
+msgid "Avail: Below treshold"
+msgstr ""
+
+#: src/components/identify/Identify.vue:321
+#, fuzzy
+msgid "Avail: Last measurement <"
+msgstr "Messung"
+
+#: src/components/identify/Identify.vue:327
+#, fuzzy
+msgid "Avail: Latest measurement older than"
+msgstr "Messung"
+
 #: src/components/systemconfiguration/DataAccuracy.vue:61
 #, fuzzy
 msgid "Availability of Gauge Measurements"
@@ -177,7 +195,7 @@
 #: src/components/gauge/HydrologicalConditions.vue:237
 #: src/components/gauge/HydrologicalConditions.vue:1040
 #: src/components/gauge/Waterlevel.vue:240
-#: src/components/gauge/Waterlevel.vue:1164
+#: src/components/gauge/Waterlevel.vue:1178
 #: src/components/importconfiguration/Import.vue:130
 #: src/components/importconfiguration/Import.vue:147
 #: src/components/importconfiguration/Import.vue:166
@@ -200,15 +218,15 @@
 #: src/components/importoverview/LogEntry.vue:160
 #: src/components/importoverview/SectionDetails.vue:109
 #: src/components/importoverview/StretchDetails.vue:113
-#: src/components/layers/Layerselect.vue:137 src/components/map/Map.vue:203
+#: src/components/layers/Layerselect.vue:158 src/components/map/Map.vue:213
 #: src/components/sections/SectionForm.vue:339
-#: src/components/sections/Sections.vue:179
-#: src/components/sections/Sections.vue:189
-#: src/components/sections/Sections.vue:231
+#: src/components/sections/Sections.vue:170
+#: src/components/sections/Sections.vue:180
+#: src/components/sections/Sections.vue:222
 #: src/components/stretches/StretchForm.vue:362
-#: src/components/stretches/Stretches.vue:179
-#: src/components/stretches/Stretches.vue:189
-#: src/components/stretches/Stretches.vue:241
+#: src/components/stretches/Stretches.vue:170
+#: src/components/stretches/Stretches.vue:180
+#: src/components/stretches/Stretches.vue:232
 #: src/components/systemconfiguration/PDFTemplates.vue:165
 #: src/components/systemconfiguration/PDFTemplates.vue:254
 #: src/components/systemconfiguration/PDFTemplates.vue:292
@@ -254,7 +272,7 @@
 #: src/components/fairway/Profiles.vue:654
 #: src/components/importconfiguration/Import.vue:204
 #: src/components/importoverview/ImportOverview.vue:447
-#: src/components/stretches/Stretches.vue:215
+#: src/components/stretches/Stretches.vue:206
 #: src/components/systemconfiguration/PDFTemplates.vue:331
 #: src/components/usermanagement/Usermanagement.vue:268
 #, fuzzy
@@ -270,7 +288,7 @@
 msgid "Choose a distance mark by clicking on the map."
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:275
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:294
 msgid "Choose color"
 msgstr ""
 
@@ -299,6 +317,14 @@
 msgid "Compare with"
 msgstr "Vergleiche mit"
 
+#: src/components/identify/Identify.vue:343
+msgid "Confidence per 24h"
+msgstr ""
+
+#: src/components/identify/Identify.vue:342
+msgid "Confidence per 72h"
+msgstr ""
+
 #: src/components/Sidebar.vue:65
 msgid "Configuration"
 msgstr "Konfiguration"
@@ -331,11 +357,6 @@
 msgid "Cronstring"
 msgstr "Crontab-Zeile"
 
-#: src/components/systemconfiguration/DataAccuracy.vue:6
-#, fuzzy
-msgid "Currency of Bottleneck Surveys"
-msgstr "Seichtstellen"
-
 #: src/components/fairway/Profiles.vue:59
 msgid "Current Waterlevel"
 msgstr ""
@@ -344,21 +365,21 @@
 msgid "Data Availability/Accuracy"
 msgstr ""
 
-#: src/components/identify/Identify.vue:194
-msgid "Data too old. Treshold: "
+#: src/components/identify/Identify.vue:360
+msgid "Data too old. Treshold:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:191
-msgid "Data within revisiting treshold "
+#: src/components/identify/Identify.vue:357
+msgid "Data within revisiting treshold"
 msgstr ""
 
-#: src/components/identify/Identify.vue:189
+#: src/components/identify/Identify.vue:355
 msgid "Data within the revisiting time"
 msgstr ""
 
 #: src/components/importconfiguration/types/Soundingresults.vue:94
-#: src/components/sections/Sections.vue:136
-#: src/components/stretches/Stretches.vue:136
+#: src/components/sections/Sections.vue:127
+#: src/components/stretches/Stretches.vue:127
 #: src/components/systemconfiguration/PDFTemplates.vue:120
 msgid "Date"
 msgstr "Datum"
@@ -403,7 +424,7 @@
 msgid "Define sections"
 msgstr ""
 
-#: src/components/sections/Sections.vue:130
+#: src/components/sections/Sections.vue:121
 msgid "Define Sections"
 msgstr ""
 
@@ -411,13 +432,13 @@
 msgid "Define stretches"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:130
+#: src/components/stretches/Stretches.vue:121
 msgid "Define Stretches"
 msgstr ""
 
 #: src/components/fairway/Profiles.vue:639
 #: src/components/importconfiguration/Import.vue:182
-#: src/components/stretches/Stretches.vue:205
+#: src/components/stretches/Stretches.vue:196
 #: src/components/systemconfiguration/PDFTemplates.vue:308
 #: src/components/usermanagement/Usermanagement.vue:242
 #, fuzzy
@@ -434,7 +455,7 @@
 msgid "Delete Import"
 msgstr "Neuer Import"
 
-#: src/components/stretches/Stretches.vue:197
+#: src/components/stretches/Stretches.vue:188
 #, fuzzy
 msgid "Delete Stretch"
 msgstr "Konto löschen"
@@ -467,8 +488,8 @@
 msgid "deleted successfully"
 msgstr "Erfolgreich"
 
-#: src/components/sections/Sections.vue:206
-#: src/components/stretches/Stretches.vue:210
+#: src/components/sections/Sections.vue:197
+#: src/components/stretches/Stretches.vue:201
 msgid "Deleting "
 msgstr "Löchen "
 
@@ -497,11 +518,11 @@
 msgid "Depthreference"
 msgstr "Tiefenreferenz"
 
-#: src/components/identify/formatter.js:62
+#: src/components/identify/formatter.js:68
 msgid "Distance Mark"
 msgstr ""
 
-#: src/components/identify/formatter.js:65
+#: src/components/identify/formatter.js:71
 msgid "Distance Mark ashore"
 msgstr ""
 
@@ -529,11 +550,11 @@
 msgid "Do you really want to delete the import with ID"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:199
+#: src/components/stretches/Stretches.vue:190
 msgid "Do you really want to delete this stretch:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:76
+#: src/components/identify/Identify.vue:130
 msgid "Download"
 msgstr "Herunterladen"
 
@@ -717,15 +738,15 @@
 msgid "G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:96
+#: src/components/identify/formatter.js:102
 msgid "Gauge"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:195
+msgid "Gauge Forecast Confidence"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:124
-msgid "Gauge Forecast Confidence"
-msgstr ""
-
-#: src/components/systemconfiguration/DataAccuracy.vue:197
 msgid "Gauge Forecast vs. Reality"
 msgstr ""
 
@@ -756,11 +777,15 @@
 msgid "Generated by"
 msgstr "– erstellt von:"
 
-#: src/components/identify/Identify.vue:106
+#: src/components/identify/Identify.vue:160
 #, fuzzy
 msgid "Generated PDFs use font:"
 msgstr "PDF generieren"
 
+#: src/components/identify/Identify.vue:340
+msgid "Highest confidence"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1062
 msgid "hour"
 msgstr "Stunde"
@@ -787,7 +812,7 @@
 msgid "ID"
 msgstr "ID"
 
-#: src/components/identify/Identify.vue:179 src/components/map/MapPopup.vue:148
+#: src/components/identify/Identify.vue:240 src/components/map/MapPopup.vue:148
 #: src/components/toolbar/Identify.vue:49
 #, fuzzy
 msgid "Identified Features"
@@ -905,12 +930,12 @@
 msgid "Latest Measurement"
 msgstr "Messung"
 
-#: src/components/identify/formatter.js:100
+#: src/components/identify/formatter.js:106
 #, fuzzy
 msgid "Latest Waterlevel"
 msgstr "Messung"
 
-#: src/components/identify/formatter.js:99
+#: src/components/identify/formatter.js:105
 #, fuzzy
 msgid "Latest Waterlevel Date"
 msgstr "Messung"
@@ -920,7 +945,7 @@
 msgid "Layers"
 msgstr "Ebenen"
 
-#: src/store/map.js:180
+#: src/store/map.js:187
 msgid "Length"
 msgstr "Länge"
 
@@ -990,7 +1015,7 @@
 msgid "Measurement"
 msgstr "Messung"
 
-#: src/components/identify/formatter.js:102
+#: src/components/identify/formatter.js:108
 msgid "Measurement Count in Last 14 Days"
 msgstr ""
 
@@ -998,13 +1023,13 @@
 msgid "measurements in the last 14 days."
 msgstr ""
 
-#: src/components/identify/formatter.js:79
-#: src/components/identify/formatter.js:90
+#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:96
 msgid "Min. G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:77
-#: src/components/identify/formatter.js:88
+#: src/components/identify/formatter.js:83
+#: src/components/identify/formatter.js:94
 msgid "Min. Gauge Waterlevel Date"
 msgstr ""
 
@@ -1035,12 +1060,26 @@
 
 #: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:6
 #: src/components/identify/formatter.js:7
-#: src/components/sections/Sections.vue:133
-#: src/components/stretches/Stretches.vue:133
+#: src/components/sections/Sections.vue:124
+#: src/components/stretches/Stretches.vue:124
 #: src/components/systemconfiguration/PDFTemplates.vue:117
 msgid "Name"
 msgstr "Name"
 
+#: src/components/identify/Identify.vue:252
+#: src/components/identify/Identify.vue:253
+#: src/components/identify/Identify.vue:254
+#: src/components/identify/Identify.vue:266
+#: src/components/identify/Identify.vue:267
+#: src/components/identify/Identify.vue:268
+msgid "Nash-Sutcliffe"
+msgstr ""
+
+#: src/components/identify/Identify.vue:255
+#: src/components/identify/Identify.vue:269
+msgid "Nash-Sutcliffe not available"
+msgstr ""
+
 #: src/components/sections/SectionForm.vue:131
 #: src/components/stretches/StretchForm.vue:148
 #, fuzzy
@@ -1065,11 +1104,11 @@
 msgid "New import"
 msgstr "Neuer Import"
 
-#: src/components/sections/Sections.vue:75
+#: src/components/sections/Sections.vue:66
 msgid "New section"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:75
+#: src/components/stretches/Stretches.vue:66
 msgid "New stretch"
 msgstr ""
 
@@ -1083,7 +1122,7 @@
 msgid "No data available."
 msgstr ""
 
-#: src/components/identify/Identify.vue:68
+#: src/components/identify/Identify.vue:122
 msgid "No features identified."
 msgstr "Keine Objekte identifiziert."
 
@@ -1095,7 +1134,7 @@
 msgid "No style-changes"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:209
+#: src/components/stretches/Stretches.vue:200
 #, fuzzy
 msgid "Not implemented"
 msgstr "Nicht implementiert"
@@ -1105,7 +1144,7 @@
 msgstr "November"
 
 #: src/components/gauge/HydrologicalConditions.vue:630
-#: src/components/gauge/Waterlevel.vue:725
+#: src/components/gauge/Waterlevel.vue:735
 msgid "Now"
 msgstr ""
 
@@ -1377,6 +1416,11 @@
 msgid "quarterly"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:6
+#, fuzzy
+msgid "Recency of Bottleneck Surveys"
+msgstr "Seichtstellen"
+
 #: src/components/Pdftool.vue:722
 msgid "Ref gauge"
 msgstr ""
@@ -1410,8 +1454,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:44
 #: src/components/systemconfiguration/DataAccuracy.vue:274
 #: src/components/systemconfiguration/MapLayers.vue:58
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:97
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:198
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:101
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:208
 msgid "Reset to defaults"
 msgstr ""
 
@@ -1427,8 +1471,8 @@
 msgid "retryDescription"
 msgstr ""
 
-#: src/components/sections/Sections.vue:142
-#: src/components/stretches/Stretches.vue:142
+#: src/components/sections/Sections.vue:133
+#: src/components/stretches/Stretches.vue:133
 msgid "Review pending import"
 msgstr ""
 
@@ -1441,6 +1485,10 @@
 msgid "Rotate Maps"
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:312
+msgid "Same value is used in multiple fields.  Please check"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1074
 msgid "Saturday"
 msgstr "Samstag"
@@ -1477,7 +1525,7 @@
 msgid "Scheduled"
 msgstr "Zeitplan"
 
-#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:91
 #, fuzzy
 msgid "Section"
 msgstr "Projektion"
@@ -1513,8 +1561,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:38
 #: src/components/systemconfiguration/DataAccuracy.vue:271
 #: src/components/systemconfiguration/MapLayers.vue:55
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:91
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:192
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:95
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:202
 msgid "Send"
 msgstr "Absenden"
 
@@ -1556,7 +1604,7 @@
 msgid "Simple"
 msgstr ""
 
-#: src/components/identify/Identify.vue:93
+#: src/components/identify/Identify.vue:147
 msgid ""
 "Some data ©\n"
 "        <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n"
@@ -1577,7 +1625,7 @@
 msgid "Sounding Result"
 msgstr "Seichtstellenvermessung"
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:102
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:109
 #, fuzzy
 msgid "Sounding Result Comparison"
 msgstr "Seichtstellenvermessung"
@@ -1587,8 +1635,8 @@
 msgid "Soundingresults"
 msgstr "Seichtstellenvermessung"
 
-#: src/components/sections/Sections.vue:139
-#: src/components/stretches/Stretches.vue:139
+#: src/components/sections/Sections.vue:130
+#: src/components/stretches/Stretches.vue:130
 #, fuzzy
 msgid "Source organization"
 msgstr "Bitte ein Datum eingeben"
@@ -1604,11 +1652,11 @@
 msgid "Source orgranization"
 msgstr ""
 
-#: src/components/identify/Identify.vue:90
+#: src/components/identify/Identify.vue:144
 msgid "source-code"
 msgstr "Quelltext"
 
-#: src/components/sections/Sections.vue:205
+#: src/components/sections/Sections.vue:196
 msgid "Staging Area"
 msgstr "Import-Überprüfung"
 
@@ -1645,7 +1693,7 @@
 msgid "Status"
 msgstr "Zustand"
 
-#: src/components/identify/formatter.js:74
+#: src/components/identify/formatter.js:80
 #, fuzzy
 msgid "Stretch"
 msgstr "Konto löschen"
@@ -1704,7 +1752,7 @@
 msgid "Testmail sent"
 msgstr "E-Mail wurde gesendet"
 
-#: src/components/systemconfiguration/DataAccuracy.vue:132
+#: src/components/systemconfiguration/DataAccuracy.vue:203
 msgid ""
 "The highest confidence value is less than\n"
 "                <b>%{gm24} cm</b>\n"
@@ -1713,13 +1761,13 @@
 "                within last 72 hours."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:177
+#: src/components/systemconfiguration/DataAccuracy.vue:248
 msgid ""
 "The highest confidence value within the last 24 hours is\n"
 "                  greater than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:155
+#: src/components/systemconfiguration/DataAccuracy.vue:226
 msgid ""
 "The highest confidence value within the last 72 hours is\n"
 "                  greater than"
@@ -1752,19 +1800,19 @@
 "                respective bottleneck."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:250
+#: src/components/systemconfiguration/DataAccuracy.vue:177
 msgid ""
 "The Nash-Sutcliffe coefficient for last 24 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:230
+#: src/components/systemconfiguration/DataAccuracy.vue:157
 msgid ""
 "The Nash-Sutcliffe coefficient for last 72 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:205
+#: src/components/systemconfiguration/DataAccuracy.vue:132
 msgid ""
 "The Nash-Sutcliffe coefficient is greater than\n"
 "                <b>%{nsc24}</b>\n"
@@ -1777,6 +1825,10 @@
 msgid "The provided template has no name property."
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:331
+msgid "There are invalid classbreak values. Please check"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:88
 msgid "There are less than"
 msgstr ""
@@ -1788,11 +1840,11 @@
 #: src/components/fairway/Profiles.vue:423
 #: src/components/importconfiguration/types/Soundingresults.vue:232
 #: src/components/importconfiguration/types/Soundingresults.vue:251
-#: src/components/layers/Layerselect.vue:67
+#: src/components/layers/Layerselect.vue:68
 msgid "this"
 msgstr ""
 
-#: src/components/identify/Identify.vue:84
+#: src/components/identify/Identify.vue:138
 msgid ""
 "This app uses <i>gemma</i>, which is Free Software under <br/>\n"
 "        %{ license } without warranty, see docs for details."
@@ -1881,8 +1933,8 @@
 msgid "URL"
 msgstr ""
 
-#: src/components/identify/Identify.vue:80
-#: src/components/identify/Identify.vue:182
+#: src/components/identify/Identify.vue:134
+#: src/components/identify/Identify.vue:243
 #, fuzzy
 msgid "User Manual"
 msgstr "Benutzername"
@@ -1900,7 +1952,7 @@
 msgid "Users"
 msgstr "Benutzer"
 
-#: src/components/identify/Identify.vue:99
+#: src/components/identify/Identify.vue:153
 msgid ""
 "Uses\n"
 "        <a href=\"https://download.geonames.org/export/dump/readme.txt"
@@ -1930,7 +1982,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:663
-#: src/components/gauge/Waterlevel.vue:611
+#: src/components/gauge/Waterlevel.vue:613
 msgid "Waterlevel [m]"
 msgstr ""
 
@@ -1953,7 +2005,7 @@
 msgid "Waterway area"
 msgstr "Waterway-Benutzer"
 
-#: src/components/identify/formatter.js:59
+#: src/components/identify/formatter.js:65
 #, fuzzy
 msgid "Waterway Area"
 msgstr "Waterway-Benutzer"
@@ -1962,7 +2014,7 @@
 msgid "Waterway axis"
 msgstr ""
 
-#: src/components/identify/formatter.js:68
+#: src/components/identify/formatter.js:74
 #, fuzzy
 msgid "Waterway Axis"
 msgstr "Waterway-Admin"
@@ -1971,7 +2023,7 @@
 msgid "Waterway gauges"
 msgstr ""
 
-#: src/components/identify/formatter.js:71
+#: src/components/identify/formatter.js:77
 #, fuzzy
 msgid "Waterway Profile"
 msgstr "Einlesen der Wasserwegsprofile"
--- a/client/src/locale/en_GB/LC_MESSAGES/app.po	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/locale/en_GB/LC_MESSAGES/app.po	Thu Sep 05 17:02:03 2019 +0200
@@ -89,6 +89,10 @@
 msgid "Accesslog"
 msgstr ""
 
+#: src/components/identify/Identify.vue:59
+msgid "According gauge data:"
+msgstr ""
+
 #: src/components/usermanagement/Userdetail.vue:242
 #: src/components/usermanagement/Usermanagement.vue:82
 msgid "Add User"
@@ -110,7 +114,7 @@
 msgid "April"
 msgstr ""
 
-#: src/store/map.js:207
+#: src/store/map.js:214
 msgid "Area"
 msgstr ""
 
@@ -122,6 +126,18 @@
 msgid "August"
 msgstr ""
 
+#: src/components/identify/Identify.vue:324
+msgid "Avail: Below treshold"
+msgstr ""
+
+#: src/components/identify/Identify.vue:321
+msgid "Avail: Last measurement <"
+msgstr ""
+
+#: src/components/identify/Identify.vue:327
+msgid "Avail: Latest measurement older than"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:61
 msgid "Availability of Gauge Measurements"
 msgstr ""
@@ -168,7 +184,7 @@
 #: src/components/gauge/HydrologicalConditions.vue:237
 #: src/components/gauge/HydrologicalConditions.vue:1040
 #: src/components/gauge/Waterlevel.vue:240
-#: src/components/gauge/Waterlevel.vue:1164
+#: src/components/gauge/Waterlevel.vue:1178
 #: src/components/importconfiguration/Import.vue:130
 #: src/components/importconfiguration/Import.vue:147
 #: src/components/importconfiguration/Import.vue:166
@@ -191,15 +207,15 @@
 #: src/components/importoverview/LogEntry.vue:160
 #: src/components/importoverview/SectionDetails.vue:109
 #: src/components/importoverview/StretchDetails.vue:113
-#: src/components/layers/Layerselect.vue:137 src/components/map/Map.vue:203
+#: src/components/layers/Layerselect.vue:158 src/components/map/Map.vue:213
 #: src/components/sections/SectionForm.vue:339
-#: src/components/sections/Sections.vue:179
-#: src/components/sections/Sections.vue:189
-#: src/components/sections/Sections.vue:231
+#: src/components/sections/Sections.vue:170
+#: src/components/sections/Sections.vue:180
+#: src/components/sections/Sections.vue:222
 #: src/components/stretches/StretchForm.vue:362
-#: src/components/stretches/Stretches.vue:179
-#: src/components/stretches/Stretches.vue:189
-#: src/components/stretches/Stretches.vue:241
+#: src/components/stretches/Stretches.vue:170
+#: src/components/stretches/Stretches.vue:180
+#: src/components/stretches/Stretches.vue:232
 #: src/components/systemconfiguration/PDFTemplates.vue:165
 #: src/components/systemconfiguration/PDFTemplates.vue:254
 #: src/components/systemconfiguration/PDFTemplates.vue:292
@@ -243,7 +259,7 @@
 #: src/components/fairway/Profiles.vue:654
 #: src/components/importconfiguration/Import.vue:204
 #: src/components/importoverview/ImportOverview.vue:447
-#: src/components/stretches/Stretches.vue:215
+#: src/components/stretches/Stretches.vue:206
 #: src/components/systemconfiguration/PDFTemplates.vue:331
 #: src/components/usermanagement/Usermanagement.vue:268
 msgid "Cancel"
@@ -258,7 +274,7 @@
 msgid "Choose a distance mark by clicking on the map."
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:275
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:294
 msgid "Choose color"
 msgstr ""
 
@@ -286,6 +302,14 @@
 msgid "Compare with"
 msgstr ""
 
+#: src/components/identify/Identify.vue:343
+msgid "Confidence per 24h"
+msgstr ""
+
+#: src/components/identify/Identify.vue:342
+msgid "Confidence per 72h"
+msgstr ""
+
 #: src/components/Sidebar.vue:65
 msgid "Configuration"
 msgstr ""
@@ -317,10 +341,6 @@
 msgid "Cronstring"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:6
-msgid "Currency of Bottleneck Surveys"
-msgstr ""
-
 #: src/components/fairway/Profiles.vue:59
 msgid "Current Waterlevel"
 msgstr ""
@@ -329,21 +349,21 @@
 msgid "Data Availability/Accuracy"
 msgstr ""
 
-#: src/components/identify/Identify.vue:194
-msgid "Data too old. Treshold: "
+#: src/components/identify/Identify.vue:360
+msgid "Data too old. Treshold:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:191
-msgid "Data within revisiting treshold "
+#: src/components/identify/Identify.vue:357
+msgid "Data within revisiting treshold"
 msgstr ""
 
-#: src/components/identify/Identify.vue:189
+#: src/components/identify/Identify.vue:355
 msgid "Data within the revisiting time"
 msgstr ""
 
 #: src/components/importconfiguration/types/Soundingresults.vue:94
-#: src/components/sections/Sections.vue:136
-#: src/components/stretches/Stretches.vue:136
+#: src/components/sections/Sections.vue:127
+#: src/components/stretches/Stretches.vue:127
 #: src/components/systemconfiguration/PDFTemplates.vue:120
 msgid "Date"
 msgstr ""
@@ -385,7 +405,7 @@
 msgid "Define sections"
 msgstr ""
 
-#: src/components/sections/Sections.vue:130
+#: src/components/sections/Sections.vue:121
 msgid "Define Sections"
 msgstr ""
 
@@ -393,13 +413,13 @@
 msgid "Define stretches"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:130
+#: src/components/stretches/Stretches.vue:121
 msgid "Define Stretches"
 msgstr ""
 
 #: src/components/fairway/Profiles.vue:639
 #: src/components/importconfiguration/Import.vue:182
-#: src/components/stretches/Stretches.vue:205
+#: src/components/stretches/Stretches.vue:196
 #: src/components/systemconfiguration/PDFTemplates.vue:308
 #: src/components/usermanagement/Usermanagement.vue:242
 msgid "Delete"
@@ -413,7 +433,7 @@
 msgid "Delete Import"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:197
+#: src/components/stretches/Stretches.vue:188
 msgid "Delete Stretch"
 msgstr ""
 
@@ -441,8 +461,8 @@
 msgid "deleted successfully"
 msgstr ""
 
-#: src/components/sections/Sections.vue:206
-#: src/components/stretches/Stretches.vue:210
+#: src/components/sections/Sections.vue:197
+#: src/components/stretches/Stretches.vue:201
 msgid "Deleting "
 msgstr ""
 
@@ -470,11 +490,11 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/identify/formatter.js:62
+#: src/components/identify/formatter.js:68
 msgid "Distance Mark"
 msgstr ""
 
-#: src/components/identify/formatter.js:65
+#: src/components/identify/formatter.js:71
 msgid "Distance Mark ashore"
 msgstr ""
 
@@ -502,11 +522,11 @@
 msgid "Do you really want to delete the import with ID"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:199
+#: src/components/stretches/Stretches.vue:190
 msgid "Do you really want to delete this stretch:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:76
+#: src/components/identify/Identify.vue:130
 msgid "Download"
 msgstr ""
 
@@ -681,15 +701,15 @@
 msgid "G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:96
+#: src/components/identify/formatter.js:102
 msgid "Gauge"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:195
+msgid "Gauge Forecast Confidence"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:124
-msgid "Gauge Forecast Confidence"
-msgstr ""
-
-#: src/components/systemconfiguration/DataAccuracy.vue:197
 msgid "Gauge Forecast vs. Reality"
 msgstr ""
 
@@ -718,10 +738,14 @@
 msgid "Generated by"
 msgstr ""
 
-#: src/components/identify/Identify.vue:106
+#: src/components/identify/Identify.vue:160
 msgid "Generated PDFs use font:"
 msgstr ""
 
+#: src/components/identify/Identify.vue:340
+msgid "Highest confidence"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1062
 msgid "hour"
 msgstr ""
@@ -748,7 +772,7 @@
 msgid "ID"
 msgstr ""
 
-#: src/components/identify/Identify.vue:179 src/components/map/MapPopup.vue:148
+#: src/components/identify/Identify.vue:240 src/components/map/MapPopup.vue:148
 #: src/components/toolbar/Identify.vue:49
 msgid "Identified Features"
 msgstr ""
@@ -856,11 +880,11 @@
 msgid "Latest Measurement"
 msgstr ""
 
-#: src/components/identify/formatter.js:100
+#: src/components/identify/formatter.js:106
 msgid "Latest Waterlevel"
 msgstr ""
 
-#: src/components/identify/formatter.js:99
+#: src/components/identify/formatter.js:105
 msgid "Latest Waterlevel Date"
 msgstr ""
 
@@ -868,7 +892,7 @@
 msgid "Layers"
 msgstr ""
 
-#: src/store/map.js:180
+#: src/store/map.js:187
 msgid "Length"
 msgstr ""
 
@@ -936,7 +960,7 @@
 msgid "Measurement"
 msgstr ""
 
-#: src/components/identify/formatter.js:102
+#: src/components/identify/formatter.js:108
 msgid "Measurement Count in Last 14 Days"
 msgstr ""
 
@@ -944,13 +968,13 @@
 msgid "measurements in the last 14 days."
 msgstr ""
 
-#: src/components/identify/formatter.js:79
-#: src/components/identify/formatter.js:90
+#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:96
 msgid "Min. G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:77
-#: src/components/identify/formatter.js:88
+#: src/components/identify/formatter.js:83
+#: src/components/identify/formatter.js:94
 msgid "Min. Gauge Waterlevel Date"
 msgstr ""
 
@@ -980,12 +1004,26 @@
 
 #: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:6
 #: src/components/identify/formatter.js:7
-#: src/components/sections/Sections.vue:133
-#: src/components/stretches/Stretches.vue:133
+#: src/components/sections/Sections.vue:124
+#: src/components/stretches/Stretches.vue:124
 #: src/components/systemconfiguration/PDFTemplates.vue:117
 msgid "Name"
 msgstr ""
 
+#: src/components/identify/Identify.vue:252
+#: src/components/identify/Identify.vue:253
+#: src/components/identify/Identify.vue:254
+#: src/components/identify/Identify.vue:266
+#: src/components/identify/Identify.vue:267
+#: src/components/identify/Identify.vue:268
+msgid "Nash-Sutcliffe"
+msgstr ""
+
+#: src/components/identify/Identify.vue:255
+#: src/components/identify/Identify.vue:269
+msgid "Nash-Sutcliffe not available"
+msgstr ""
+
 #: src/components/sections/SectionForm.vue:131
 #: src/components/stretches/StretchForm.vue:148
 msgid "National Object name"
@@ -1008,11 +1046,11 @@
 msgid "New import"
 msgstr ""
 
-#: src/components/sections/Sections.vue:75
+#: src/components/sections/Sections.vue:66
 msgid "New section"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:75
+#: src/components/stretches/Stretches.vue:66
 msgid "New stretch"
 msgstr ""
 
@@ -1026,7 +1064,7 @@
 msgid "No data available."
 msgstr ""
 
-#: src/components/identify/Identify.vue:68
+#: src/components/identify/Identify.vue:122
 msgid "No features identified."
 msgstr ""
 
@@ -1038,7 +1076,7 @@
 msgid "No style-changes"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:209
+#: src/components/stretches/Stretches.vue:200
 msgid "Not implemented"
 msgstr ""
 
@@ -1047,7 +1085,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:630
-#: src/components/gauge/Waterlevel.vue:725
+#: src/components/gauge/Waterlevel.vue:735
 msgid "Now"
 msgstr ""
 
@@ -1298,6 +1336,10 @@
 msgid "quarterly"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:6
+msgid "Recency of Bottleneck Surveys"
+msgstr ""
+
 #: src/components/Pdftool.vue:722
 msgid "Ref gauge"
 msgstr ""
@@ -1329,8 +1371,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:44
 #: src/components/systemconfiguration/DataAccuracy.vue:274
 #: src/components/systemconfiguration/MapLayers.vue:58
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:97
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:198
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:101
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:208
 msgid "Reset to defaults"
 msgstr ""
 
@@ -1346,8 +1388,8 @@
 msgid "retryDescription"
 msgstr ""
 
-#: src/components/sections/Sections.vue:142
-#: src/components/stretches/Stretches.vue:142
+#: src/components/sections/Sections.vue:133
+#: src/components/stretches/Stretches.vue:133
 msgid "Review pending import"
 msgstr ""
 
@@ -1360,6 +1402,10 @@
 msgid "Rotate Maps"
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:312
+msgid "Same value is used in multiple fields.  Please check"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1074
 msgid "Saturday"
 msgstr ""
@@ -1394,7 +1440,7 @@
 msgid "Scheduled"
 msgstr ""
 
-#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:91
 msgid "Section"
 msgstr ""
 
@@ -1426,8 +1472,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:38
 #: src/components/systemconfiguration/DataAccuracy.vue:271
 #: src/components/systemconfiguration/MapLayers.vue:55
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:91
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:192
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:95
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:202
 msgid "Send"
 msgstr ""
 
@@ -1467,7 +1513,7 @@
 msgid "Simple"
 msgstr ""
 
-#: src/components/identify/Identify.vue:93
+#: src/components/identify/Identify.vue:147
 msgid ""
 "Some data ©\n"
 "        <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n"
@@ -1486,7 +1532,7 @@
 msgid "Sounding Result"
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:102
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:109
 msgid "Sounding Result Comparison"
 msgstr ""
 
@@ -1494,8 +1540,8 @@
 msgid "Soundingresults"
 msgstr ""
 
-#: src/components/sections/Sections.vue:139
-#: src/components/stretches/Stretches.vue:139
+#: src/components/sections/Sections.vue:130
+#: src/components/stretches/Stretches.vue:130
 msgid "Source organization"
 msgstr ""
 
@@ -1509,11 +1555,11 @@
 msgid "Source orgranization"
 msgstr ""
 
-#: src/components/identify/Identify.vue:90
+#: src/components/identify/Identify.vue:144
 msgid "source-code"
 msgstr ""
 
-#: src/components/sections/Sections.vue:205
+#: src/components/sections/Sections.vue:196
 msgid "Staging Area"
 msgstr ""
 
@@ -1546,7 +1592,7 @@
 msgid "Status"
 msgstr ""
 
-#: src/components/identify/formatter.js:74
+#: src/components/identify/formatter.js:80
 msgid "Stretch"
 msgstr ""
 
@@ -1601,7 +1647,7 @@
 msgid "Testmail sent"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:132
+#: src/components/systemconfiguration/DataAccuracy.vue:203
 msgid ""
 "The highest confidence value is less than\n"
 "                <b>%{gm24} cm</b>\n"
@@ -1610,13 +1656,13 @@
 "                within last 72 hours."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:177
+#: src/components/systemconfiguration/DataAccuracy.vue:248
 msgid ""
 "The highest confidence value within the last 24 hours is\n"
 "                  greater than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:155
+#: src/components/systemconfiguration/DataAccuracy.vue:226
 msgid ""
 "The highest confidence value within the last 72 hours is\n"
 "                  greater than"
@@ -1649,19 +1695,19 @@
 "                respective bottleneck."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:250
+#: src/components/systemconfiguration/DataAccuracy.vue:177
 msgid ""
 "The Nash-Sutcliffe coefficient for last 24 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:230
+#: src/components/systemconfiguration/DataAccuracy.vue:157
 msgid ""
 "The Nash-Sutcliffe coefficient for last 72 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:205
+#: src/components/systemconfiguration/DataAccuracy.vue:132
 msgid ""
 "The Nash-Sutcliffe coefficient is greater than\n"
 "                <b>%{nsc24}</b>\n"
@@ -1674,6 +1720,10 @@
 msgid "The provided template has no name property."
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:331
+msgid "There are invalid classbreak values. Please check"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:88
 msgid "There are less than"
 msgstr ""
@@ -1685,11 +1735,11 @@
 #: src/components/fairway/Profiles.vue:423
 #: src/components/importconfiguration/types/Soundingresults.vue:232
 #: src/components/importconfiguration/types/Soundingresults.vue:251
-#: src/components/layers/Layerselect.vue:67
+#: src/components/layers/Layerselect.vue:68
 msgid "this"
 msgstr ""
 
-#: src/components/identify/Identify.vue:84
+#: src/components/identify/Identify.vue:138
 msgid ""
 "This app uses <i>gemma</i>, which is Free Software under <br/>\n"
 "        %{ license } without warranty, see docs for details."
@@ -1776,8 +1826,8 @@
 msgid "URL"
 msgstr ""
 
-#: src/components/identify/Identify.vue:80
-#: src/components/identify/Identify.vue:182
+#: src/components/identify/Identify.vue:134
+#: src/components/identify/Identify.vue:243
 msgid "User Manual"
 msgstr ""
 
@@ -1794,7 +1844,7 @@
 msgid "Users"
 msgstr ""
 
-#: src/components/identify/Identify.vue:99
+#: src/components/identify/Identify.vue:153
 msgid ""
 "Uses\n"
 "        <a href=\"https://download.geonames.org/export/dump/readme.txt"
@@ -1820,7 +1870,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:663
-#: src/components/gauge/Waterlevel.vue:611
+#: src/components/gauge/Waterlevel.vue:613
 msgid "Waterlevel [m]"
 msgstr ""
 
@@ -1841,7 +1891,7 @@
 msgid "Waterway area"
 msgstr ""
 
-#: src/components/identify/formatter.js:59
+#: src/components/identify/formatter.js:65
 msgid "Waterway Area"
 msgstr ""
 
@@ -1849,7 +1899,7 @@
 msgid "Waterway axis"
 msgstr ""
 
-#: src/components/identify/formatter.js:68
+#: src/components/identify/formatter.js:74
 msgid "Waterway Axis"
 msgstr ""
 
@@ -1857,7 +1907,7 @@
 msgid "Waterway gauges"
 msgstr ""
 
-#: src/components/identify/formatter.js:71
+#: src/components/identify/formatter.js:77
 msgid "Waterway Profile"
 msgstr ""
 
--- a/client/src/locale/hr_HR/LC_MESSAGES/app.po	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/locale/hr_HR/LC_MESSAGES/app.po	Thu Sep 05 17:02:03 2019 +0200
@@ -93,6 +93,10 @@
 msgid "Accesslog"
 msgstr "Zapis pristupa"
 
+#: src/components/identify/Identify.vue:59
+msgid "According gauge data:"
+msgstr ""
+
 #: src/components/usermanagement/Userdetail.vue:242
 #: src/components/usermanagement/Usermanagement.vue:82
 msgid "Add User"
@@ -115,7 +119,7 @@
 msgid "April"
 msgstr "Travanj"
 
-#: src/store/map.js:207
+#: src/store/map.js:214
 msgid "Area"
 msgstr "Područje"
 
@@ -127,6 +131,20 @@
 msgid "August"
 msgstr "Kolovoz"
 
+#: src/components/identify/Identify.vue:324
+msgid "Avail: Below treshold"
+msgstr ""
+
+#: src/components/identify/Identify.vue:321
+#, fuzzy
+msgid "Avail: Last measurement <"
+msgstr "Mjerenje"
+
+#: src/components/identify/Identify.vue:327
+#, fuzzy
+msgid "Avail: Latest measurement older than"
+msgstr "Mjerenje"
+
 #: src/components/systemconfiguration/DataAccuracy.vue:61
 #, fuzzy
 msgid "Availability of Gauge Measurements"
@@ -178,7 +196,7 @@
 #: src/components/gauge/HydrologicalConditions.vue:237
 #: src/components/gauge/HydrologicalConditions.vue:1040
 #: src/components/gauge/Waterlevel.vue:240
-#: src/components/gauge/Waterlevel.vue:1164
+#: src/components/gauge/Waterlevel.vue:1178
 #: src/components/importconfiguration/Import.vue:130
 #: src/components/importconfiguration/Import.vue:147
 #: src/components/importconfiguration/Import.vue:166
@@ -201,15 +219,15 @@
 #: src/components/importoverview/LogEntry.vue:160
 #: src/components/importoverview/SectionDetails.vue:109
 #: src/components/importoverview/StretchDetails.vue:113
-#: src/components/layers/Layerselect.vue:137 src/components/map/Map.vue:203
+#: src/components/layers/Layerselect.vue:158 src/components/map/Map.vue:213
 #: src/components/sections/SectionForm.vue:339
-#: src/components/sections/Sections.vue:179
-#: src/components/sections/Sections.vue:189
-#: src/components/sections/Sections.vue:231
+#: src/components/sections/Sections.vue:170
+#: src/components/sections/Sections.vue:180
+#: src/components/sections/Sections.vue:222
 #: src/components/stretches/StretchForm.vue:362
-#: src/components/stretches/Stretches.vue:179
-#: src/components/stretches/Stretches.vue:189
-#: src/components/stretches/Stretches.vue:241
+#: src/components/stretches/Stretches.vue:170
+#: src/components/stretches/Stretches.vue:180
+#: src/components/stretches/Stretches.vue:232
 #: src/components/systemconfiguration/PDFTemplates.vue:165
 #: src/components/systemconfiguration/PDFTemplates.vue:254
 #: src/components/systemconfiguration/PDFTemplates.vue:292
@@ -255,7 +273,7 @@
 #: src/components/fairway/Profiles.vue:654
 #: src/components/importconfiguration/Import.vue:204
 #: src/components/importoverview/ImportOverview.vue:447
-#: src/components/stretches/Stretches.vue:215
+#: src/components/stretches/Stretches.vue:206
 #: src/components/systemconfiguration/PDFTemplates.vue:331
 #: src/components/usermanagement/Usermanagement.vue:268
 #, fuzzy
@@ -271,7 +289,7 @@
 msgid "Choose a distance mark by clicking on the map."
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:275
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:294
 msgid "Choose color"
 msgstr ""
 
@@ -300,6 +318,14 @@
 msgid "Compare with"
 msgstr "Usporedi sa"
 
+#: src/components/identify/Identify.vue:343
+msgid "Confidence per 24h"
+msgstr ""
+
+#: src/components/identify/Identify.vue:342
+msgid "Confidence per 72h"
+msgstr ""
+
 #: src/components/Sidebar.vue:65
 msgid "Configuration"
 msgstr "Konfiguracija"
@@ -331,11 +357,6 @@
 msgid "Cronstring"
 msgstr "Crontab - linija"
 
-#: src/components/systemconfiguration/DataAccuracy.vue:6
-#, fuzzy
-msgid "Currency of Bottleneck Surveys"
-msgstr "Kritični sektori"
-
 #: src/components/fairway/Profiles.vue:59
 msgid "Current Waterlevel"
 msgstr ""
@@ -344,21 +365,21 @@
 msgid "Data Availability/Accuracy"
 msgstr ""
 
-#: src/components/identify/Identify.vue:194
-msgid "Data too old. Treshold: "
+#: src/components/identify/Identify.vue:360
+msgid "Data too old. Treshold:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:191
-msgid "Data within revisiting treshold "
+#: src/components/identify/Identify.vue:357
+msgid "Data within revisiting treshold"
 msgstr ""
 
-#: src/components/identify/Identify.vue:189
+#: src/components/identify/Identify.vue:355
 msgid "Data within the revisiting time"
 msgstr ""
 
 #: src/components/importconfiguration/types/Soundingresults.vue:94
-#: src/components/sections/Sections.vue:136
-#: src/components/stretches/Stretches.vue:136
+#: src/components/sections/Sections.vue:127
+#: src/components/stretches/Stretches.vue:127
 #: src/components/systemconfiguration/PDFTemplates.vue:120
 msgid "Date"
 msgstr "Datum"
@@ -404,7 +425,7 @@
 msgid "Define sections"
 msgstr "Definiraj dionice"
 
-#: src/components/sections/Sections.vue:130
+#: src/components/sections/Sections.vue:121
 #, fuzzy
 msgid "Define Sections"
 msgstr "Definiraj dionice"
@@ -413,14 +434,14 @@
 msgid "Define stretches"
 msgstr "Definiraj dionice"
 
-#: src/components/stretches/Stretches.vue:130
+#: src/components/stretches/Stretches.vue:121
 #, fuzzy
 msgid "Define Stretches"
 msgstr "Definiraj dionice"
 
 #: src/components/fairway/Profiles.vue:639
 #: src/components/importconfiguration/Import.vue:182
-#: src/components/stretches/Stretches.vue:205
+#: src/components/stretches/Stretches.vue:196
 #: src/components/systemconfiguration/PDFTemplates.vue:308
 #: src/components/usermanagement/Usermanagement.vue:242
 #, fuzzy
@@ -437,7 +458,7 @@
 msgid "Delete Import"
 msgstr "Obrisan uvoz: #"
 
-#: src/components/stretches/Stretches.vue:197
+#: src/components/stretches/Stretches.vue:188
 #, fuzzy
 msgid "Delete Stretch"
 msgstr "Definiraj dionice"
@@ -471,8 +492,8 @@
 msgid "deleted successfully"
 msgstr "Uspješno"
 
-#: src/components/sections/Sections.vue:206
-#: src/components/stretches/Stretches.vue:210
+#: src/components/sections/Sections.vue:197
+#: src/components/stretches/Stretches.vue:201
 msgid "Deleting "
 msgstr "Brisanje "
 
@@ -501,12 +522,12 @@
 msgid "Depthreference"
 msgstr "Referentna dubina"
 
-#: src/components/identify/formatter.js:62
+#: src/components/identify/formatter.js:68
 #, fuzzy
 msgid "Distance Mark"
 msgstr "Virtualne Oznake Udaljenosti"
 
-#: src/components/identify/formatter.js:65
+#: src/components/identify/formatter.js:71
 #, fuzzy
 msgid "Distance Mark ashore"
 msgstr "Virtualne Oznake Udaljenosti"
@@ -537,11 +558,11 @@
 msgid "Do you really want to delete the import with ID"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:199
+#: src/components/stretches/Stretches.vue:190
 msgid "Do you really want to delete this stretch:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:76
+#: src/components/identify/Identify.vue:130
 msgid "Download"
 msgstr "Preuzimanje"
 
@@ -725,15 +746,15 @@
 msgid "G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:96
+#: src/components/identify/formatter.js:102
 msgid "Gauge"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:195
+msgid "Gauge Forecast Confidence"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:124
-msgid "Gauge Forecast Confidence"
-msgstr ""
-
-#: src/components/systemconfiguration/DataAccuracy.vue:197
 msgid "Gauge Forecast vs. Reality"
 msgstr ""
 
@@ -764,11 +785,15 @@
 msgid "Generated by"
 msgstr "– kreiran od:"
 
-#: src/components/identify/Identify.vue:106
+#: src/components/identify/Identify.vue:160
 #, fuzzy
 msgid "Generated PDFs use font:"
 msgstr "Kreiraj PDF"
 
+#: src/components/identify/Identify.vue:340
+msgid "Highest confidence"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1062
 msgid "hour"
 msgstr "sat"
@@ -795,7 +820,7 @@
 msgid "ID"
 msgstr "ID"
 
-#: src/components/identify/Identify.vue:179 src/components/map/MapPopup.vue:148
+#: src/components/identify/Identify.vue:240 src/components/map/MapPopup.vue:148
 #: src/components/toolbar/Identify.vue:49
 #, fuzzy
 msgid "Identified Features"
@@ -913,12 +938,12 @@
 msgid "Latest Measurement"
 msgstr "Mjerenje"
 
-#: src/components/identify/formatter.js:100
+#: src/components/identify/formatter.js:106
 #, fuzzy
 msgid "Latest Waterlevel"
 msgstr "Mjerenje"
 
-#: src/components/identify/formatter.js:99
+#: src/components/identify/formatter.js:105
 #, fuzzy
 msgid "Latest Waterlevel Date"
 msgstr "Mjerenje"
@@ -928,7 +953,7 @@
 msgid "Layers"
 msgstr "Slojevi"
 
-#: src/store/map.js:180
+#: src/store/map.js:187
 msgid "Length"
 msgstr "Duljina"
 
@@ -998,7 +1023,7 @@
 msgid "Measurement"
 msgstr "Mjerenje"
 
-#: src/components/identify/formatter.js:102
+#: src/components/identify/formatter.js:108
 msgid "Measurement Count in Last 14 Days"
 msgstr ""
 
@@ -1006,13 +1031,13 @@
 msgid "measurements in the last 14 days."
 msgstr ""
 
-#: src/components/identify/formatter.js:79
-#: src/components/identify/formatter.js:90
+#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:96
 msgid "Min. G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:77
-#: src/components/identify/formatter.js:88
+#: src/components/identify/formatter.js:83
+#: src/components/identify/formatter.js:94
 msgid "Min. Gauge Waterlevel Date"
 msgstr ""
 
@@ -1043,12 +1068,26 @@
 
 #: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:6
 #: src/components/identify/formatter.js:7
-#: src/components/sections/Sections.vue:133
-#: src/components/stretches/Stretches.vue:133
+#: src/components/sections/Sections.vue:124
+#: src/components/stretches/Stretches.vue:124
 #: src/components/systemconfiguration/PDFTemplates.vue:117
 msgid "Name"
 msgstr "Naziv"
 
+#: src/components/identify/Identify.vue:252
+#: src/components/identify/Identify.vue:253
+#: src/components/identify/Identify.vue:254
+#: src/components/identify/Identify.vue:266
+#: src/components/identify/Identify.vue:267
+#: src/components/identify/Identify.vue:268
+msgid "Nash-Sutcliffe"
+msgstr ""
+
+#: src/components/identify/Identify.vue:255
+#: src/components/identify/Identify.vue:269
+msgid "Nash-Sutcliffe not available"
+msgstr ""
+
 #: src/components/sections/SectionForm.vue:131
 #: src/components/stretches/StretchForm.vue:148
 msgid "National Object name"
@@ -1072,12 +1111,12 @@
 msgid "New import"
 msgstr "Novi uvoz"
 
-#: src/components/sections/Sections.vue:75
+#: src/components/sections/Sections.vue:66
 #, fuzzy
 msgid "New section"
 msgstr "Nova dionica"
 
-#: src/components/stretches/Stretches.vue:75
+#: src/components/stretches/Stretches.vue:66
 msgid "New stretch"
 msgstr "Nova dionica"
 
@@ -1091,7 +1130,7 @@
 msgid "No data available."
 msgstr ""
 
-#: src/components/identify/Identify.vue:68
+#: src/components/identify/Identify.vue:122
 msgid "No features identified."
 msgstr "Nema identificiranih objekata."
 
@@ -1103,7 +1142,7 @@
 msgid "No style-changes"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:209
+#: src/components/stretches/Stretches.vue:200
 msgid "Not implemented"
 msgstr "Nije implementirano"
 
@@ -1112,7 +1151,7 @@
 msgstr "Studeni"
 
 #: src/components/gauge/HydrologicalConditions.vue:630
-#: src/components/gauge/Waterlevel.vue:725
+#: src/components/gauge/Waterlevel.vue:735
 msgid "Now"
 msgstr ""
 
@@ -1370,6 +1409,11 @@
 msgid "quarterly"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:6
+#, fuzzy
+msgid "Recency of Bottleneck Surveys"
+msgstr "Kritični sektori"
+
 #: src/components/Pdftool.vue:722
 msgid "Ref gauge"
 msgstr ""
@@ -1403,8 +1447,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:44
 #: src/components/systemconfiguration/DataAccuracy.vue:274
 #: src/components/systemconfiguration/MapLayers.vue:58
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:97
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:198
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:101
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:208
 msgid "Reset to defaults"
 msgstr ""
 
@@ -1420,8 +1464,8 @@
 msgid "retryDescription"
 msgstr ""
 
-#: src/components/sections/Sections.vue:142
-#: src/components/stretches/Stretches.vue:142
+#: src/components/sections/Sections.vue:133
+#: src/components/stretches/Stretches.vue:133
 msgid "Review pending import"
 msgstr ""
 
@@ -1434,6 +1478,10 @@
 msgid "Rotate Maps"
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:312
+msgid "Same value is used in multiple fields.  Please check"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1074
 msgid "Saturday"
 msgstr "Subota"
@@ -1468,7 +1516,7 @@
 msgid "Scheduled"
 msgstr "Planiran"
 
-#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:91
 #, fuzzy
 msgid "Section"
 msgstr "Projekcija"
@@ -1504,8 +1552,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:38
 #: src/components/systemconfiguration/DataAccuracy.vue:271
 #: src/components/systemconfiguration/MapLayers.vue:55
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:91
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:192
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:95
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:202
 msgid "Send"
 msgstr "Pošalji"
 
@@ -1546,7 +1594,7 @@
 msgid "Simple"
 msgstr ""
 
-#: src/components/identify/Identify.vue:93
+#: src/components/identify/Identify.vue:147
 msgid ""
 "Some data ©\n"
 "        <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n"
@@ -1569,7 +1617,7 @@
 msgid "Sounding Result"
 msgstr "Rezultat Hidrografskog mjerenja"
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:102
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:109
 #, fuzzy
 msgid "Sounding Result Comparison"
 msgstr "Rezultat Hidrografskog mjerenja"
@@ -1579,8 +1627,8 @@
 msgid "Soundingresults"
 msgstr "Rezultat Hidrografskog mjerenja"
 
-#: src/components/sections/Sections.vue:139
-#: src/components/stretches/Stretches.vue:139
+#: src/components/sections/Sections.vue:130
+#: src/components/stretches/Stretches.vue:130
 msgid "Source organization"
 msgstr "Organizacija izvora"
 
@@ -1595,11 +1643,11 @@
 msgid "Source orgranization"
 msgstr "Organizacija izvora"
 
-#: src/components/identify/Identify.vue:90
+#: src/components/identify/Identify.vue:144
 msgid "source-code"
 msgstr "izvorni kod"
 
-#: src/components/sections/Sections.vue:205
+#: src/components/sections/Sections.vue:196
 msgid "Staging Area"
 msgstr "Pristanište"
 
@@ -1634,7 +1682,7 @@
 msgid "Status"
 msgstr "Stanje"
 
-#: src/components/identify/formatter.js:74
+#: src/components/identify/formatter.js:80
 #, fuzzy
 msgid "Stretch"
 msgstr "Definiraj dionice"
@@ -1692,7 +1740,7 @@
 msgid "Testmail sent"
 msgstr "E-mail je poslan"
 
-#: src/components/systemconfiguration/DataAccuracy.vue:132
+#: src/components/systemconfiguration/DataAccuracy.vue:203
 msgid ""
 "The highest confidence value is less than\n"
 "                <b>%{gm24} cm</b>\n"
@@ -1701,13 +1749,13 @@
 "                within last 72 hours."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:177
+#: src/components/systemconfiguration/DataAccuracy.vue:248
 msgid ""
 "The highest confidence value within the last 24 hours is\n"
 "                  greater than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:155
+#: src/components/systemconfiguration/DataAccuracy.vue:226
 msgid ""
 "The highest confidence value within the last 72 hours is\n"
 "                  greater than"
@@ -1740,19 +1788,19 @@
 "                respective bottleneck."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:250
+#: src/components/systemconfiguration/DataAccuracy.vue:177
 msgid ""
 "The Nash-Sutcliffe coefficient for last 24 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:230
+#: src/components/systemconfiguration/DataAccuracy.vue:157
 msgid ""
 "The Nash-Sutcliffe coefficient for last 72 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:205
+#: src/components/systemconfiguration/DataAccuracy.vue:132
 msgid ""
 "The Nash-Sutcliffe coefficient is greater than\n"
 "                <b>%{nsc24}</b>\n"
@@ -1765,6 +1813,10 @@
 msgid "The provided template has no name property."
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:331
+msgid "There are invalid classbreak values. Please check"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:88
 msgid "There are less than"
 msgstr ""
@@ -1776,11 +1828,11 @@
 #: src/components/fairway/Profiles.vue:423
 #: src/components/importconfiguration/types/Soundingresults.vue:232
 #: src/components/importconfiguration/types/Soundingresults.vue:251
-#: src/components/layers/Layerselect.vue:67
+#: src/components/layers/Layerselect.vue:68
 msgid "this"
 msgstr ""
 
-#: src/components/identify/Identify.vue:84
+#: src/components/identify/Identify.vue:138
 msgid ""
 "This app uses <i>gemma</i>, which is Free Software under <br/>\n"
 "        %{ license } without warranty, see docs for details."
@@ -1869,8 +1921,8 @@
 msgid "URL"
 msgstr "URL"
 
-#: src/components/identify/Identify.vue:80
-#: src/components/identify/Identify.vue:182
+#: src/components/identify/Identify.vue:134
+#: src/components/identify/Identify.vue:243
 #, fuzzy
 msgid "User Manual"
 msgstr "Korisničko ime"
@@ -1888,7 +1940,7 @@
 msgid "Users"
 msgstr "Korisnici"
 
-#: src/components/identify/Identify.vue:99
+#: src/components/identify/Identify.vue:153
 msgid ""
 "Uses\n"
 "        <a href=\"https://download.geonames.org/export/dump/readme.txt"
@@ -1918,7 +1970,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:663
-#: src/components/gauge/Waterlevel.vue:611
+#: src/components/gauge/Waterlevel.vue:613
 msgid "Waterlevel [m]"
 msgstr ""
 
@@ -1940,7 +1992,7 @@
 msgid "Waterway area"
 msgstr "Područje plovnog puta"
 
-#: src/components/identify/formatter.js:59
+#: src/components/identify/formatter.js:65
 #, fuzzy
 msgid "Waterway Area"
 msgstr "Područje plovnog puta"
@@ -1949,7 +2001,7 @@
 msgid "Waterway axis"
 msgstr "Os plovnog puta"
 
-#: src/components/identify/formatter.js:68
+#: src/components/identify/formatter.js:74
 #, fuzzy
 msgid "Waterway Axis"
 msgstr "Os plovnog puta"
@@ -1958,7 +2010,7 @@
 msgid "Waterway gauges"
 msgstr "Vodomjerna stanica"
 
-#: src/components/identify/formatter.js:71
+#: src/components/identify/formatter.js:77
 #, fuzzy
 msgid "Waterway Profile"
 msgstr "Uvoz Profila Plovnog Puta"
--- a/client/src/locale/hu_HU/LC_MESSAGES/app.po	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/locale/hu_HU/LC_MESSAGES/app.po	Thu Sep 05 17:02:03 2019 +0200
@@ -92,6 +92,10 @@
 msgid "Accesslog"
 msgstr "Bejelentkezési log"
 
+#: src/components/identify/Identify.vue:59
+msgid "According gauge data:"
+msgstr ""
+
 #: src/components/usermanagement/Userdetail.vue:242
 #: src/components/usermanagement/Usermanagement.vue:82
 msgid "Add User"
@@ -113,7 +117,7 @@
 msgid "April"
 msgstr "Április"
 
-#: src/store/map.js:207
+#: src/store/map.js:214
 msgid "Area"
 msgstr "terület"
 
@@ -125,6 +129,18 @@
 msgid "August"
 msgstr "Augusztus"
 
+#: src/components/identify/Identify.vue:324
+msgid "Avail: Below treshold"
+msgstr ""
+
+#: src/components/identify/Identify.vue:321
+msgid "Avail: Last measurement <"
+msgstr ""
+
+#: src/components/identify/Identify.vue:327
+msgid "Avail: Latest measurement older than"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:61
 msgid "Availability of Gauge Measurements"
 msgstr ""
@@ -174,7 +190,7 @@
 #: src/components/gauge/HydrologicalConditions.vue:237
 #: src/components/gauge/HydrologicalConditions.vue:1040
 #: src/components/gauge/Waterlevel.vue:240
-#: src/components/gauge/Waterlevel.vue:1164
+#: src/components/gauge/Waterlevel.vue:1178
 #: src/components/importconfiguration/Import.vue:130
 #: src/components/importconfiguration/Import.vue:147
 #: src/components/importconfiguration/Import.vue:166
@@ -197,15 +213,15 @@
 #: src/components/importoverview/LogEntry.vue:160
 #: src/components/importoverview/SectionDetails.vue:109
 #: src/components/importoverview/StretchDetails.vue:113
-#: src/components/layers/Layerselect.vue:137 src/components/map/Map.vue:203
+#: src/components/layers/Layerselect.vue:158 src/components/map/Map.vue:213
 #: src/components/sections/SectionForm.vue:339
-#: src/components/sections/Sections.vue:179
-#: src/components/sections/Sections.vue:189
-#: src/components/sections/Sections.vue:231
+#: src/components/sections/Sections.vue:170
+#: src/components/sections/Sections.vue:180
+#: src/components/sections/Sections.vue:222
 #: src/components/stretches/StretchForm.vue:362
-#: src/components/stretches/Stretches.vue:179
-#: src/components/stretches/Stretches.vue:189
-#: src/components/stretches/Stretches.vue:241
+#: src/components/stretches/Stretches.vue:170
+#: src/components/stretches/Stretches.vue:180
+#: src/components/stretches/Stretches.vue:232
 #: src/components/systemconfiguration/PDFTemplates.vue:165
 #: src/components/systemconfiguration/PDFTemplates.vue:254
 #: src/components/systemconfiguration/PDFTemplates.vue:292
@@ -252,7 +268,7 @@
 #: src/components/fairway/Profiles.vue:654
 #: src/components/importconfiguration/Import.vue:204
 #: src/components/importoverview/ImportOverview.vue:447
-#: src/components/stretches/Stretches.vue:215
+#: src/components/stretches/Stretches.vue:206
 #: src/components/systemconfiguration/PDFTemplates.vue:331
 #: src/components/usermanagement/Usermanagement.vue:268
 msgid "Cancel"
@@ -267,7 +283,7 @@
 msgid "Choose a distance mark by clicking on the map."
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:275
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:294
 msgid "Choose color"
 msgstr ""
 
@@ -295,6 +311,14 @@
 msgid "Compare with"
 msgstr ""
 
+#: src/components/identify/Identify.vue:343
+msgid "Confidence per 24h"
+msgstr ""
+
+#: src/components/identify/Identify.vue:342
+msgid "Confidence per 72h"
+msgstr ""
+
 #: src/components/Sidebar.vue:65
 msgid "Configuration"
 msgstr ""
@@ -327,11 +351,6 @@
 msgid "Cronstring"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:6
-#, fuzzy
-msgid "Currency of Bottleneck Surveys"
-msgstr "Gázlók"
-
 #: src/components/fairway/Profiles.vue:59
 msgid "Current Waterlevel"
 msgstr ""
@@ -340,21 +359,21 @@
 msgid "Data Availability/Accuracy"
 msgstr ""
 
-#: src/components/identify/Identify.vue:194
-msgid "Data too old. Treshold: "
+#: src/components/identify/Identify.vue:360
+msgid "Data too old. Treshold:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:191
-msgid "Data within revisiting treshold "
+#: src/components/identify/Identify.vue:357
+msgid "Data within revisiting treshold"
 msgstr ""
 
-#: src/components/identify/Identify.vue:189
+#: src/components/identify/Identify.vue:355
 msgid "Data within the revisiting time"
 msgstr ""
 
 #: src/components/importconfiguration/types/Soundingresults.vue:94
-#: src/components/sections/Sections.vue:136
-#: src/components/stretches/Stretches.vue:136
+#: src/components/sections/Sections.vue:127
+#: src/components/stretches/Stretches.vue:127
 #: src/components/systemconfiguration/PDFTemplates.vue:120
 msgid "Date"
 msgstr ""
@@ -396,7 +415,7 @@
 msgid "Define sections"
 msgstr ""
 
-#: src/components/sections/Sections.vue:130
+#: src/components/sections/Sections.vue:121
 msgid "Define Sections"
 msgstr ""
 
@@ -404,13 +423,13 @@
 msgid "Define stretches"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:130
+#: src/components/stretches/Stretches.vue:121
 msgid "Define Stretches"
 msgstr ""
 
 #: src/components/fairway/Profiles.vue:639
 #: src/components/importconfiguration/Import.vue:182
-#: src/components/stretches/Stretches.vue:205
+#: src/components/stretches/Stretches.vue:196
 #: src/components/systemconfiguration/PDFTemplates.vue:308
 #: src/components/usermanagement/Usermanagement.vue:242
 msgid "Delete"
@@ -424,7 +443,7 @@
 msgid "Delete Import"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:197
+#: src/components/stretches/Stretches.vue:188
 msgid "Delete Stretch"
 msgstr ""
 
@@ -452,8 +471,8 @@
 msgid "deleted successfully"
 msgstr ""
 
-#: src/components/sections/Sections.vue:206
-#: src/components/stretches/Stretches.vue:210
+#: src/components/sections/Sections.vue:197
+#: src/components/stretches/Stretches.vue:201
 msgid "Deleting "
 msgstr ""
 
@@ -481,11 +500,11 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/identify/formatter.js:62
+#: src/components/identify/formatter.js:68
 msgid "Distance Mark"
 msgstr ""
 
-#: src/components/identify/formatter.js:65
+#: src/components/identify/formatter.js:71
 msgid "Distance Mark ashore"
 msgstr ""
 
@@ -513,11 +532,11 @@
 msgid "Do you really want to delete the import with ID"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:199
+#: src/components/stretches/Stretches.vue:190
 msgid "Do you really want to delete this stretch:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:76
+#: src/components/identify/Identify.vue:130
 msgid "Download"
 msgstr ""
 
@@ -693,15 +712,15 @@
 msgid "G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:96
+#: src/components/identify/formatter.js:102
 msgid "Gauge"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:195
+msgid "Gauge Forecast Confidence"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:124
-msgid "Gauge Forecast Confidence"
-msgstr ""
-
-#: src/components/systemconfiguration/DataAccuracy.vue:197
 msgid "Gauge Forecast vs. Reality"
 msgstr ""
 
@@ -731,10 +750,14 @@
 msgid "Generated by"
 msgstr "- létrehozta:"
 
-#: src/components/identify/Identify.vue:106
+#: src/components/identify/Identify.vue:160
 msgid "Generated PDFs use font:"
 msgstr ""
 
+#: src/components/identify/Identify.vue:340
+msgid "Highest confidence"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1062
 msgid "hour"
 msgstr ""
@@ -761,7 +784,7 @@
 msgid "ID"
 msgstr ""
 
-#: src/components/identify/Identify.vue:179 src/components/map/MapPopup.vue:148
+#: src/components/identify/Identify.vue:240 src/components/map/MapPopup.vue:148
 #: src/components/toolbar/Identify.vue:49
 msgid "Identified Features"
 msgstr ""
@@ -869,11 +892,11 @@
 msgid "Latest Measurement"
 msgstr ""
 
-#: src/components/identify/formatter.js:100
+#: src/components/identify/formatter.js:106
 msgid "Latest Waterlevel"
 msgstr ""
 
-#: src/components/identify/formatter.js:99
+#: src/components/identify/formatter.js:105
 msgid "Latest Waterlevel Date"
 msgstr ""
 
@@ -882,7 +905,7 @@
 msgid "Layers"
 msgstr "Rétegek"
 
-#: src/store/map.js:180
+#: src/store/map.js:187
 msgid "Length"
 msgstr ""
 
@@ -951,7 +974,7 @@
 msgid "Measurement"
 msgstr ""
 
-#: src/components/identify/formatter.js:102
+#: src/components/identify/formatter.js:108
 msgid "Measurement Count in Last 14 Days"
 msgstr ""
 
@@ -959,13 +982,13 @@
 msgid "measurements in the last 14 days."
 msgstr ""
 
-#: src/components/identify/formatter.js:79
-#: src/components/identify/formatter.js:90
+#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:96
 msgid "Min. G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:77
-#: src/components/identify/formatter.js:88
+#: src/components/identify/formatter.js:83
+#: src/components/identify/formatter.js:94
 msgid "Min. Gauge Waterlevel Date"
 msgstr ""
 
@@ -995,13 +1018,27 @@
 
 #: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:6
 #: src/components/identify/formatter.js:7
-#: src/components/sections/Sections.vue:133
-#: src/components/stretches/Stretches.vue:133
+#: src/components/sections/Sections.vue:124
+#: src/components/stretches/Stretches.vue:124
 #: src/components/systemconfiguration/PDFTemplates.vue:117
 #, fuzzy
 msgid "Name"
 msgstr "Név"
 
+#: src/components/identify/Identify.vue:252
+#: src/components/identify/Identify.vue:253
+#: src/components/identify/Identify.vue:254
+#: src/components/identify/Identify.vue:266
+#: src/components/identify/Identify.vue:267
+#: src/components/identify/Identify.vue:268
+msgid "Nash-Sutcliffe"
+msgstr ""
+
+#: src/components/identify/Identify.vue:255
+#: src/components/identify/Identify.vue:269
+msgid "Nash-Sutcliffe not available"
+msgstr ""
+
 #: src/components/sections/SectionForm.vue:131
 #: src/components/stretches/StretchForm.vue:148
 msgid "National Object name"
@@ -1024,11 +1061,11 @@
 msgid "New import"
 msgstr ""
 
-#: src/components/sections/Sections.vue:75
+#: src/components/sections/Sections.vue:66
 msgid "New section"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:75
+#: src/components/stretches/Stretches.vue:66
 msgid "New stretch"
 msgstr ""
 
@@ -1042,7 +1079,7 @@
 msgid "No data available."
 msgstr ""
 
-#: src/components/identify/Identify.vue:68
+#: src/components/identify/Identify.vue:122
 msgid "No features identified."
 msgstr ""
 
@@ -1054,7 +1091,7 @@
 msgid "No style-changes"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:209
+#: src/components/stretches/Stretches.vue:200
 msgid "Not implemented"
 msgstr ""
 
@@ -1063,7 +1100,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:630
-#: src/components/gauge/Waterlevel.vue:725
+#: src/components/gauge/Waterlevel.vue:735
 msgid "Now"
 msgstr ""
 
@@ -1317,6 +1354,11 @@
 msgid "quarterly"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:6
+#, fuzzy
+msgid "Recency of Bottleneck Surveys"
+msgstr "Gázlók"
+
 #: src/components/Pdftool.vue:722
 msgid "Ref gauge"
 msgstr ""
@@ -1348,8 +1390,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:44
 #: src/components/systemconfiguration/DataAccuracy.vue:274
 #: src/components/systemconfiguration/MapLayers.vue:58
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:97
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:198
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:101
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:208
 msgid "Reset to defaults"
 msgstr ""
 
@@ -1365,8 +1407,8 @@
 msgid "retryDescription"
 msgstr ""
 
-#: src/components/sections/Sections.vue:142
-#: src/components/stretches/Stretches.vue:142
+#: src/components/sections/Sections.vue:133
+#: src/components/stretches/Stretches.vue:133
 msgid "Review pending import"
 msgstr ""
 
@@ -1379,6 +1421,10 @@
 msgid "Rotate Maps"
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:312
+msgid "Same value is used in multiple fields.  Please check"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1074
 msgid "Saturday"
 msgstr ""
@@ -1413,7 +1459,7 @@
 msgid "Scheduled"
 msgstr ""
 
-#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:91
 msgid "Section"
 msgstr ""
 
@@ -1446,8 +1492,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:38
 #: src/components/systemconfiguration/DataAccuracy.vue:271
 #: src/components/systemconfiguration/MapLayers.vue:55
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:91
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:192
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:95
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:202
 #, fuzzy
 msgid "Send"
 msgstr "Küldés"
@@ -1489,7 +1535,7 @@
 msgid "Simple"
 msgstr ""
 
-#: src/components/identify/Identify.vue:93
+#: src/components/identify/Identify.vue:147
 msgid ""
 "Some data ©\n"
 "        <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n"
@@ -1508,7 +1554,7 @@
 msgid "Sounding Result"
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:102
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:109
 msgid "Sounding Result Comparison"
 msgstr ""
 
@@ -1516,8 +1562,8 @@
 msgid "Soundingresults"
 msgstr ""
 
-#: src/components/sections/Sections.vue:139
-#: src/components/stretches/Stretches.vue:139
+#: src/components/sections/Sections.vue:130
+#: src/components/stretches/Stretches.vue:130
 msgid "Source organization"
 msgstr ""
 
@@ -1531,11 +1577,11 @@
 msgid "Source orgranization"
 msgstr ""
 
-#: src/components/identify/Identify.vue:90
+#: src/components/identify/Identify.vue:144
 msgid "source-code"
 msgstr ""
 
-#: src/components/sections/Sections.vue:205
+#: src/components/sections/Sections.vue:196
 msgid "Staging Area"
 msgstr ""
 
@@ -1568,7 +1614,7 @@
 msgid "Status"
 msgstr ""
 
-#: src/components/identify/formatter.js:74
+#: src/components/identify/formatter.js:80
 msgid "Stretch"
 msgstr ""
 
@@ -1623,7 +1669,7 @@
 msgid "Testmail sent"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:132
+#: src/components/systemconfiguration/DataAccuracy.vue:203
 msgid ""
 "The highest confidence value is less than\n"
 "                <b>%{gm24} cm</b>\n"
@@ -1632,13 +1678,13 @@
 "                within last 72 hours."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:177
+#: src/components/systemconfiguration/DataAccuracy.vue:248
 msgid ""
 "The highest confidence value within the last 24 hours is\n"
 "                  greater than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:155
+#: src/components/systemconfiguration/DataAccuracy.vue:226
 msgid ""
 "The highest confidence value within the last 72 hours is\n"
 "                  greater than"
@@ -1671,19 +1717,19 @@
 "                respective bottleneck."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:250
+#: src/components/systemconfiguration/DataAccuracy.vue:177
 msgid ""
 "The Nash-Sutcliffe coefficient for last 24 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:230
+#: src/components/systemconfiguration/DataAccuracy.vue:157
 msgid ""
 "The Nash-Sutcliffe coefficient for last 72 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:205
+#: src/components/systemconfiguration/DataAccuracy.vue:132
 msgid ""
 "The Nash-Sutcliffe coefficient is greater than\n"
 "                <b>%{nsc24}</b>\n"
@@ -1696,6 +1742,10 @@
 msgid "The provided template has no name property."
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:331
+msgid "There are invalid classbreak values. Please check"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:88
 msgid "There are less than"
 msgstr ""
@@ -1707,11 +1757,11 @@
 #: src/components/fairway/Profiles.vue:423
 #: src/components/importconfiguration/types/Soundingresults.vue:232
 #: src/components/importconfiguration/types/Soundingresults.vue:251
-#: src/components/layers/Layerselect.vue:67
+#: src/components/layers/Layerselect.vue:68
 msgid "this"
 msgstr ""
 
-#: src/components/identify/Identify.vue:84
+#: src/components/identify/Identify.vue:138
 msgid ""
 "This app uses <i>gemma</i>, which is Free Software under <br/>\n"
 "        %{ license } without warranty, see docs for details."
@@ -1799,8 +1849,8 @@
 msgid "URL"
 msgstr ""
 
-#: src/components/identify/Identify.vue:80
-#: src/components/identify/Identify.vue:182
+#: src/components/identify/Identify.vue:134
+#: src/components/identify/Identify.vue:243
 msgid "User Manual"
 msgstr ""
 
@@ -1817,7 +1867,7 @@
 msgid "Users"
 msgstr ""
 
-#: src/components/identify/Identify.vue:99
+#: src/components/identify/Identify.vue:153
 msgid ""
 "Uses\n"
 "        <a href=\"https://download.geonames.org/export/dump/readme.txt"
@@ -1843,7 +1893,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:663
-#: src/components/gauge/Waterlevel.vue:611
+#: src/components/gauge/Waterlevel.vue:613
 msgid "Waterlevel [m]"
 msgstr ""
 
@@ -1864,7 +1914,7 @@
 msgid "Waterway area"
 msgstr ""
 
-#: src/components/identify/formatter.js:59
+#: src/components/identify/formatter.js:65
 msgid "Waterway Area"
 msgstr ""
 
@@ -1872,7 +1922,7 @@
 msgid "Waterway axis"
 msgstr ""
 
-#: src/components/identify/formatter.js:68
+#: src/components/identify/formatter.js:74
 msgid "Waterway Axis"
 msgstr ""
 
@@ -1880,7 +1930,7 @@
 msgid "Waterway gauges"
 msgstr ""
 
-#: src/components/identify/formatter.js:71
+#: src/components/identify/formatter.js:77
 msgid "Waterway Profile"
 msgstr ""
 
--- a/client/src/locale/ro_RO/LC_MESSAGES/app.po	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/locale/ro_RO/LC_MESSAGES/app.po	Thu Sep 05 17:02:03 2019 +0200
@@ -92,6 +92,10 @@
 msgid "Accesslog"
 msgstr "Acces la log"
 
+#: src/components/identify/Identify.vue:59
+msgid "According gauge data:"
+msgstr ""
+
 #: src/components/usermanagement/Userdetail.vue:242
 #: src/components/usermanagement/Usermanagement.vue:82
 msgid "Add User"
@@ -113,7 +117,7 @@
 msgid "April"
 msgstr "Aprilie"
 
-#: src/store/map.js:207
+#: src/store/map.js:214
 msgid "Area"
 msgstr "Zona"
 
@@ -125,6 +129,20 @@
 msgid "August"
 msgstr "August"
 
+#: src/components/identify/Identify.vue:324
+msgid "Avail: Below treshold"
+msgstr ""
+
+#: src/components/identify/Identify.vue:321
+#, fuzzy
+msgid "Avail: Last measurement <"
+msgstr "Ultima Masuratoare"
+
+#: src/components/identify/Identify.vue:327
+#, fuzzy
+msgid "Avail: Latest measurement older than"
+msgstr "Ultima Masuratoare"
+
 #: src/components/systemconfiguration/DataAccuracy.vue:61
 #, fuzzy
 msgid "Availability of Gauge Measurements"
@@ -175,7 +193,7 @@
 #: src/components/gauge/HydrologicalConditions.vue:237
 #: src/components/gauge/HydrologicalConditions.vue:1040
 #: src/components/gauge/Waterlevel.vue:240
-#: src/components/gauge/Waterlevel.vue:1164
+#: src/components/gauge/Waterlevel.vue:1178
 #: src/components/importconfiguration/Import.vue:130
 #: src/components/importconfiguration/Import.vue:147
 #: src/components/importconfiguration/Import.vue:166
@@ -198,15 +216,15 @@
 #: src/components/importoverview/LogEntry.vue:160
 #: src/components/importoverview/SectionDetails.vue:109
 #: src/components/importoverview/StretchDetails.vue:113
-#: src/components/layers/Layerselect.vue:137 src/components/map/Map.vue:203
+#: src/components/layers/Layerselect.vue:158 src/components/map/Map.vue:213
 #: src/components/sections/SectionForm.vue:339
-#: src/components/sections/Sections.vue:179
-#: src/components/sections/Sections.vue:189
-#: src/components/sections/Sections.vue:231
+#: src/components/sections/Sections.vue:170
+#: src/components/sections/Sections.vue:180
+#: src/components/sections/Sections.vue:222
 #: src/components/stretches/StretchForm.vue:362
-#: src/components/stretches/Stretches.vue:179
-#: src/components/stretches/Stretches.vue:189
-#: src/components/stretches/Stretches.vue:241
+#: src/components/stretches/Stretches.vue:170
+#: src/components/stretches/Stretches.vue:180
+#: src/components/stretches/Stretches.vue:232
 #: src/components/systemconfiguration/PDFTemplates.vue:165
 #: src/components/systemconfiguration/PDFTemplates.vue:254
 #: src/components/systemconfiguration/PDFTemplates.vue:292
@@ -252,7 +270,7 @@
 #: src/components/fairway/Profiles.vue:654
 #: src/components/importconfiguration/Import.vue:204
 #: src/components/importoverview/ImportOverview.vue:447
-#: src/components/stretches/Stretches.vue:215
+#: src/components/stretches/Stretches.vue:206
 #: src/components/systemconfiguration/PDFTemplates.vue:331
 #: src/components/usermanagement/Usermanagement.vue:268
 msgid "Cancel"
@@ -267,7 +285,7 @@
 msgid "Choose a distance mark by clicking on the map."
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:275
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:294
 msgid "Choose color"
 msgstr ""
 
@@ -296,6 +314,14 @@
 msgid "Compare with"
 msgstr "Compara cu"
 
+#: src/components/identify/Identify.vue:343
+msgid "Confidence per 24h"
+msgstr ""
+
+#: src/components/identify/Identify.vue:342
+msgid "Confidence per 72h"
+msgstr ""
+
 #: src/components/Sidebar.vue:65
 msgid "Configuration"
 msgstr "Configurare"
@@ -327,11 +353,6 @@
 msgid "Cronstring"
 msgstr "Sir cronologic"
 
-#: src/components/systemconfiguration/DataAccuracy.vue:6
-#, fuzzy
-msgid "Currency of Bottleneck Surveys"
-msgstr "Puncte critice"
-
 #: src/components/fairway/Profiles.vue:59
 #, fuzzy
 msgid "Current Waterlevel"
@@ -341,21 +362,21 @@
 msgid "Data Availability/Accuracy"
 msgstr ""
 
-#: src/components/identify/Identify.vue:194
-msgid "Data too old. Treshold: "
+#: src/components/identify/Identify.vue:360
+msgid "Data too old. Treshold:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:191
-msgid "Data within revisiting treshold "
+#: src/components/identify/Identify.vue:357
+msgid "Data within revisiting treshold"
 msgstr ""
 
-#: src/components/identify/Identify.vue:189
+#: src/components/identify/Identify.vue:355
 msgid "Data within the revisiting time"
 msgstr ""
 
 #: src/components/importconfiguration/types/Soundingresults.vue:94
-#: src/components/sections/Sections.vue:136
-#: src/components/stretches/Stretches.vue:136
+#: src/components/sections/Sections.vue:127
+#: src/components/stretches/Stretches.vue:127
 #: src/components/systemconfiguration/PDFTemplates.vue:120
 msgid "Date"
 msgstr "Data"
@@ -401,7 +422,7 @@
 msgid "Define sections"
 msgstr "Defineşte secţiunile"
 
-#: src/components/sections/Sections.vue:130
+#: src/components/sections/Sections.vue:121
 #, fuzzy
 msgid "Define Sections"
 msgstr "Defineşte sectoarele"
@@ -410,13 +431,13 @@
 msgid "Define stretches"
 msgstr "Defineşte secţiunile"
 
-#: src/components/stretches/Stretches.vue:130
+#: src/components/stretches/Stretches.vue:121
 msgid "Define Stretches"
 msgstr "Defineşte sectoarele"
 
 #: src/components/fairway/Profiles.vue:639
 #: src/components/importconfiguration/Import.vue:182
-#: src/components/stretches/Stretches.vue:205
+#: src/components/stretches/Stretches.vue:196
 #: src/components/systemconfiguration/PDFTemplates.vue:308
 #: src/components/usermanagement/Usermanagement.vue:242
 msgid "Delete"
@@ -430,7 +451,7 @@
 msgid "Delete Import"
 msgstr "Sterge importul"
 
-#: src/components/stretches/Stretches.vue:197
+#: src/components/stretches/Stretches.vue:188
 msgid "Delete Stretch"
 msgstr "Sterge sectorul"
 
@@ -459,8 +480,8 @@
 msgid "deleted successfully"
 msgstr "sterse cu succes"
 
-#: src/components/sections/Sections.vue:206
-#: src/components/stretches/Stretches.vue:210
+#: src/components/sections/Sections.vue:197
+#: src/components/stretches/Stretches.vue:201
 msgid "Deleting "
 msgstr "Șterge "
 
@@ -489,12 +510,12 @@
 msgid "Depthreference"
 msgstr "Adâncimea de eeferinţă"
 
-#: src/components/identify/formatter.js:62
+#: src/components/identify/formatter.js:68
 #, fuzzy
 msgid "Distance Mark"
 msgstr "Marcaj distanță pe uscat"
 
-#: src/components/identify/formatter.js:65
+#: src/components/identify/formatter.js:71
 #, fuzzy
 msgid "Distance Mark ashore"
 msgstr "Marcaj distanță pe uscat"
@@ -523,11 +544,11 @@
 msgid "Do you really want to delete the import with ID"
 msgstr "Chiar vrei să ştergi importul cu ID"
 
-#: src/components/stretches/Stretches.vue:199
+#: src/components/stretches/Stretches.vue:190
 msgid "Do you really want to delete this stretch:"
 msgstr "Chiar vrei să ştergi acest sector:"
 
-#: src/components/identify/Identify.vue:76
+#: src/components/identify/Identify.vue:130
 msgid "Download"
 msgstr "Descarcă"
 
@@ -706,16 +727,16 @@
 msgid "G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:96
+#: src/components/identify/formatter.js:102
 #, fuzzy
 msgid "Gauge"
 msgstr "Mire"
 
-#: src/components/systemconfiguration/DataAccuracy.vue:124
+#: src/components/systemconfiguration/DataAccuracy.vue:195
 msgid "Gauge Forecast Confidence"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:197
+#: src/components/systemconfiguration/DataAccuracy.vue:124
 msgid "Gauge Forecast vs. Reality"
 msgstr ""
 
@@ -746,10 +767,14 @@
 msgid "Generated by"
 msgstr "Generat de"
 
-#: src/components/identify/Identify.vue:106
+#: src/components/identify/Identify.vue:160
 msgid "Generated PDFs use font:"
 msgstr "Genereaza PDF-uri:"
 
+#: src/components/identify/Identify.vue:340
+msgid "Highest confidence"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1062
 msgid "hour"
 msgstr "ora"
@@ -777,7 +802,7 @@
 msgid "ID"
 msgstr "Eticheta"
 
-#: src/components/identify/Identify.vue:179 src/components/map/MapPopup.vue:148
+#: src/components/identify/Identify.vue:240 src/components/map/MapPopup.vue:148
 #: src/components/toolbar/Identify.vue:49
 #, fuzzy
 msgid "Identified Features"
@@ -888,12 +913,12 @@
 msgid "Latest Measurement"
 msgstr "Ultima Masuratoare"
 
-#: src/components/identify/formatter.js:100
+#: src/components/identify/formatter.js:106
 #, fuzzy
 msgid "Latest Waterlevel"
 msgstr "Nivelul apei"
 
-#: src/components/identify/formatter.js:99
+#: src/components/identify/formatter.js:105
 #, fuzzy
 msgid "Latest Waterlevel Date"
 msgstr "Nivelul apei"
@@ -903,7 +928,7 @@
 msgid "Layers"
 msgstr "Straturi"
 
-#: src/store/map.js:180
+#: src/store/map.js:187
 msgid "Length"
 msgstr "Lungime"
 
@@ -973,7 +998,7 @@
 msgid "Measurement"
 msgstr "Ultima Masuratoare"
 
-#: src/components/identify/formatter.js:102
+#: src/components/identify/formatter.js:108
 msgid "Measurement Count in Last 14 Days"
 msgstr ""
 
@@ -981,13 +1006,13 @@
 msgid "measurements in the last 14 days."
 msgstr ""
 
-#: src/components/identify/formatter.js:79
-#: src/components/identify/formatter.js:90
+#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:96
 msgid "Min. G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:77
-#: src/components/identify/formatter.js:88
+#: src/components/identify/formatter.js:83
+#: src/components/identify/formatter.js:94
 msgid "Min. Gauge Waterlevel Date"
 msgstr ""
 
@@ -1018,12 +1043,26 @@
 
 #: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:6
 #: src/components/identify/formatter.js:7
-#: src/components/sections/Sections.vue:133
-#: src/components/stretches/Stretches.vue:133
+#: src/components/sections/Sections.vue:124
+#: src/components/stretches/Stretches.vue:124
 #: src/components/systemconfiguration/PDFTemplates.vue:117
 msgid "Name"
 msgstr "Nume"
 
+#: src/components/identify/Identify.vue:252
+#: src/components/identify/Identify.vue:253
+#: src/components/identify/Identify.vue:254
+#: src/components/identify/Identify.vue:266
+#: src/components/identify/Identify.vue:267
+#: src/components/identify/Identify.vue:268
+msgid "Nash-Sutcliffe"
+msgstr ""
+
+#: src/components/identify/Identify.vue:255
+#: src/components/identify/Identify.vue:269
+msgid "Nash-Sutcliffe not available"
+msgstr ""
+
 #: src/components/sections/SectionForm.vue:131
 #: src/components/stretches/StretchForm.vue:148
 msgid "National Object name"
@@ -1047,12 +1086,12 @@
 msgid "New import"
 msgstr "Import nou"
 
-#: src/components/sections/Sections.vue:75
+#: src/components/sections/Sections.vue:66
 #, fuzzy
 msgid "New section"
 msgstr "Sector nou"
 
-#: src/components/stretches/Stretches.vue:75
+#: src/components/stretches/Stretches.vue:66
 msgid "New stretch"
 msgstr "Sector nou"
 
@@ -1066,7 +1105,7 @@
 msgid "No data available."
 msgstr "Nu sunt disponibile date."
 
-#: src/components/identify/Identify.vue:68
+#: src/components/identify/Identify.vue:122
 msgid "No features identified."
 msgstr "Nicio caracteristica identificata."
 
@@ -1078,7 +1117,7 @@
 msgid "No style-changes"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:209
+#: src/components/stretches/Stretches.vue:200
 msgid "Not implemented"
 msgstr "Nu este implementat"
 
@@ -1087,7 +1126,7 @@
 msgstr "Noiembrie"
 
 #: src/components/gauge/HydrologicalConditions.vue:630
-#: src/components/gauge/Waterlevel.vue:725
+#: src/components/gauge/Waterlevel.vue:735
 msgid "Now"
 msgstr "Acum"
 
@@ -1342,6 +1381,11 @@
 msgid "quarterly"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:6
+#, fuzzy
+msgid "Recency of Bottleneck Surveys"
+msgstr "Puncte critice"
+
 #: src/components/Pdftool.vue:722
 msgid "Ref gauge"
 msgstr "Mira de referinta"
@@ -1375,8 +1419,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:44
 #: src/components/systemconfiguration/DataAccuracy.vue:274
 #: src/components/systemconfiguration/MapLayers.vue:58
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:97
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:198
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:101
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:208
 msgid "Reset to defaults"
 msgstr ""
 
@@ -1392,8 +1436,8 @@
 msgid "retryDescription"
 msgstr ""
 
-#: src/components/sections/Sections.vue:142
-#: src/components/stretches/Stretches.vue:142
+#: src/components/sections/Sections.vue:133
+#: src/components/stretches/Stretches.vue:133
 msgid "Review pending import"
 msgstr ""
 
@@ -1406,6 +1450,10 @@
 msgid "Rotate Maps"
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:312
+msgid "Same value is used in multiple fields.  Please check"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1074
 msgid "Saturday"
 msgstr "Sambata"
@@ -1441,7 +1489,7 @@
 msgid "Scheduled"
 msgstr "Programat"
 
-#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:91
 #, fuzzy
 msgid "Section"
 msgstr "Proiectie"
@@ -1478,8 +1526,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:38
 #: src/components/systemconfiguration/DataAccuracy.vue:271
 #: src/components/systemconfiguration/MapLayers.vue:55
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:91
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:192
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:95
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:202
 msgid "Send"
 msgstr "Trimite"
 
@@ -1522,7 +1570,7 @@
 msgid "Simple"
 msgstr ""
 
-#: src/components/identify/Identify.vue:93
+#: src/components/identify/Identify.vue:147
 msgid ""
 "Some data ©\n"
 "        <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n"
@@ -1545,7 +1593,7 @@
 msgid "Sounding Result"
 msgstr "Rezultate masuratori hidrografice"
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:102
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:109
 #, fuzzy
 msgid "Sounding Result Comparison"
 msgstr "Rezultate masuratori hidrografice"
@@ -1554,8 +1602,8 @@
 msgid "Soundingresults"
 msgstr "Rezultate masuratori hidrografice"
 
-#: src/components/sections/Sections.vue:139
-#: src/components/stretches/Stretches.vue:139
+#: src/components/sections/Sections.vue:130
+#: src/components/stretches/Stretches.vue:130
 msgid "Source organization"
 msgstr "Organizatia sursa"
 
@@ -1570,11 +1618,11 @@
 msgid "Source orgranization"
 msgstr "Organizatia sursa"
 
-#: src/components/identify/Identify.vue:90
+#: src/components/identify/Identify.vue:144
 msgid "source-code"
 msgstr "cod sursa"
 
-#: src/components/sections/Sections.vue:205
+#: src/components/sections/Sections.vue:196
 msgid "Staging Area"
 msgstr "Debarcader"
 
@@ -1608,7 +1656,7 @@
 msgid "Status"
 msgstr "Stare"
 
-#: src/components/identify/formatter.js:74
+#: src/components/identify/formatter.js:80
 #, fuzzy
 msgid "Stretch"
 msgstr "Defineşte sectoarele"
@@ -1666,7 +1714,7 @@
 msgid "Testmail sent"
 msgstr "E-mail-ul de test a fost trimis"
 
-#: src/components/systemconfiguration/DataAccuracy.vue:132
+#: src/components/systemconfiguration/DataAccuracy.vue:203
 msgid ""
 "The highest confidence value is less than\n"
 "                <b>%{gm24} cm</b>\n"
@@ -1675,13 +1723,13 @@
 "                within last 72 hours."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:177
+#: src/components/systemconfiguration/DataAccuracy.vue:248
 msgid ""
 "The highest confidence value within the last 24 hours is\n"
 "                  greater than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:155
+#: src/components/systemconfiguration/DataAccuracy.vue:226
 msgid ""
 "The highest confidence value within the last 72 hours is\n"
 "                  greater than"
@@ -1714,19 +1762,19 @@
 "                respective bottleneck."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:250
+#: src/components/systemconfiguration/DataAccuracy.vue:177
 msgid ""
 "The Nash-Sutcliffe coefficient for last 24 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:230
+#: src/components/systemconfiguration/DataAccuracy.vue:157
 msgid ""
 "The Nash-Sutcliffe coefficient for last 72 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:205
+#: src/components/systemconfiguration/DataAccuracy.vue:132
 msgid ""
 "The Nash-Sutcliffe coefficient is greater than\n"
 "                <b>%{nsc24}</b>\n"
@@ -1739,6 +1787,10 @@
 msgid "The provided template has no name property."
 msgstr "Templat-ul furnizat nu are nume."
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:331
+msgid "There are invalid classbreak values. Please check"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:88
 msgid "There are less than"
 msgstr ""
@@ -1750,11 +1802,11 @@
 #: src/components/fairway/Profiles.vue:423
 #: src/components/importconfiguration/types/Soundingresults.vue:232
 #: src/components/importconfiguration/types/Soundingresults.vue:251
-#: src/components/layers/Layerselect.vue:67
+#: src/components/layers/Layerselect.vue:68
 msgid "this"
 msgstr ""
 
-#: src/components/identify/Identify.vue:84
+#: src/components/identify/Identify.vue:138
 msgid ""
 "This app uses <i>gemma</i>, which is Free Software under <br/>\n"
 "        %{ license } without warranty, see docs for details."
@@ -1847,8 +1899,8 @@
 msgid "URL"
 msgstr "URL"
 
-#: src/components/identify/Identify.vue:80
-#: src/components/identify/Identify.vue:182
+#: src/components/identify/Identify.vue:134
+#: src/components/identify/Identify.vue:243
 #, fuzzy
 msgid "User Manual"
 msgstr "Nume utilizator"
@@ -1866,7 +1918,7 @@
 msgid "Users"
 msgstr "Utilizatori"
 
-#: src/components/identify/Identify.vue:99
+#: src/components/identify/Identify.vue:153
 msgid ""
 "Uses\n"
 "        <a href=\"https://download.geonames.org/export/dump/readme.txt"
@@ -1896,7 +1948,7 @@
 msgstr "Nivelul apei"
 
 #: src/components/gauge/HydrologicalConditions.vue:663
-#: src/components/gauge/Waterlevel.vue:611
+#: src/components/gauge/Waterlevel.vue:613
 #, fuzzy
 msgid "Waterlevel [m]"
 msgstr "Nivelul apei [cm]"
@@ -1920,7 +1972,7 @@
 msgid "Waterway area"
 msgstr "Aria caii navigabile"
 
-#: src/components/identify/formatter.js:59
+#: src/components/identify/formatter.js:65
 #, fuzzy
 msgid "Waterway Area"
 msgstr "Aria caii navigabile"
@@ -1929,7 +1981,7 @@
 msgid "Waterway axis"
 msgstr "Axa caii navigabile"
 
-#: src/components/identify/formatter.js:68
+#: src/components/identify/formatter.js:74
 #, fuzzy
 msgid "Waterway Axis"
 msgstr "Axa caii navigabile"
@@ -1938,7 +1990,7 @@
 msgid "Waterway gauges"
 msgstr "Mire ale caii navigabile"
 
-#: src/components/identify/formatter.js:71
+#: src/components/identify/formatter.js:77
 #, fuzzy
 msgid "Waterway Profile"
 msgstr "Profile ale caii navigabile"
--- a/client/src/locale/sk_SK/LC_MESSAGES/app.po	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/locale/sk_SK/LC_MESSAGES/app.po	Thu Sep 05 17:02:03 2019 +0200
@@ -91,6 +91,10 @@
 msgid "Accesslog"
 msgstr ""
 
+#: src/components/identify/Identify.vue:59
+msgid "According gauge data:"
+msgstr ""
+
 #: src/components/usermanagement/Userdetail.vue:242
 #: src/components/usermanagement/Usermanagement.vue:82
 msgid "Add User"
@@ -112,7 +116,7 @@
 msgid "April"
 msgstr ""
 
-#: src/store/map.js:207
+#: src/store/map.js:214
 msgid "Area"
 msgstr "Oblasť"
 
@@ -124,6 +128,18 @@
 msgid "August"
 msgstr ""
 
+#: src/components/identify/Identify.vue:324
+msgid "Avail: Below treshold"
+msgstr ""
+
+#: src/components/identify/Identify.vue:321
+msgid "Avail: Last measurement <"
+msgstr ""
+
+#: src/components/identify/Identify.vue:327
+msgid "Avail: Latest measurement older than"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:61
 msgid "Availability of Gauge Measurements"
 msgstr ""
@@ -170,7 +186,7 @@
 #: src/components/gauge/HydrologicalConditions.vue:237
 #: src/components/gauge/HydrologicalConditions.vue:1040
 #: src/components/gauge/Waterlevel.vue:240
-#: src/components/gauge/Waterlevel.vue:1164
+#: src/components/gauge/Waterlevel.vue:1178
 #: src/components/importconfiguration/Import.vue:130
 #: src/components/importconfiguration/Import.vue:147
 #: src/components/importconfiguration/Import.vue:166
@@ -193,15 +209,15 @@
 #: src/components/importoverview/LogEntry.vue:160
 #: src/components/importoverview/SectionDetails.vue:109
 #: src/components/importoverview/StretchDetails.vue:113
-#: src/components/layers/Layerselect.vue:137 src/components/map/Map.vue:203
+#: src/components/layers/Layerselect.vue:158 src/components/map/Map.vue:213
 #: src/components/sections/SectionForm.vue:339
-#: src/components/sections/Sections.vue:179
-#: src/components/sections/Sections.vue:189
-#: src/components/sections/Sections.vue:231
+#: src/components/sections/Sections.vue:170
+#: src/components/sections/Sections.vue:180
+#: src/components/sections/Sections.vue:222
 #: src/components/stretches/StretchForm.vue:362
-#: src/components/stretches/Stretches.vue:179
-#: src/components/stretches/Stretches.vue:189
-#: src/components/stretches/Stretches.vue:241
+#: src/components/stretches/Stretches.vue:170
+#: src/components/stretches/Stretches.vue:180
+#: src/components/stretches/Stretches.vue:232
 #: src/components/systemconfiguration/PDFTemplates.vue:165
 #: src/components/systemconfiguration/PDFTemplates.vue:254
 #: src/components/systemconfiguration/PDFTemplates.vue:292
@@ -247,7 +263,7 @@
 #: src/components/fairway/Profiles.vue:654
 #: src/components/importconfiguration/Import.vue:204
 #: src/components/importoverview/ImportOverview.vue:447
-#: src/components/stretches/Stretches.vue:215
+#: src/components/stretches/Stretches.vue:206
 #: src/components/systemconfiguration/PDFTemplates.vue:331
 #: src/components/usermanagement/Usermanagement.vue:268
 msgid "Cancel"
@@ -262,7 +278,7 @@
 msgid "Choose a distance mark by clicking on the map."
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:275
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:294
 msgid "Choose color"
 msgstr ""
 
@@ -290,6 +306,14 @@
 msgid "Compare with"
 msgstr ""
 
+#: src/components/identify/Identify.vue:343
+msgid "Confidence per 24h"
+msgstr ""
+
+#: src/components/identify/Identify.vue:342
+msgid "Confidence per 72h"
+msgstr ""
+
 #: src/components/Sidebar.vue:65
 msgid "Configuration"
 msgstr ""
@@ -321,11 +345,6 @@
 msgid "Cronstring"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:6
-#, fuzzy
-msgid "Currency of Bottleneck Surveys"
-msgstr "Brody a úžiny"
-
 #: src/components/fairway/Profiles.vue:59
 msgid "Current Waterlevel"
 msgstr ""
@@ -334,21 +353,21 @@
 msgid "Data Availability/Accuracy"
 msgstr ""
 
-#: src/components/identify/Identify.vue:194
-msgid "Data too old. Treshold: "
+#: src/components/identify/Identify.vue:360
+msgid "Data too old. Treshold:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:191
-msgid "Data within revisiting treshold "
+#: src/components/identify/Identify.vue:357
+msgid "Data within revisiting treshold"
 msgstr ""
 
-#: src/components/identify/Identify.vue:189
+#: src/components/identify/Identify.vue:355
 msgid "Data within the revisiting time"
 msgstr ""
 
 #: src/components/importconfiguration/types/Soundingresults.vue:94
-#: src/components/sections/Sections.vue:136
-#: src/components/stretches/Stretches.vue:136
+#: src/components/sections/Sections.vue:127
+#: src/components/stretches/Stretches.vue:127
 #: src/components/systemconfiguration/PDFTemplates.vue:120
 msgid "Date"
 msgstr ""
@@ -391,7 +410,7 @@
 msgid "Define sections"
 msgstr ""
 
-#: src/components/sections/Sections.vue:130
+#: src/components/sections/Sections.vue:121
 msgid "Define Sections"
 msgstr ""
 
@@ -399,13 +418,13 @@
 msgid "Define stretches"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:130
+#: src/components/stretches/Stretches.vue:121
 msgid "Define Stretches"
 msgstr ""
 
 #: src/components/fairway/Profiles.vue:639
 #: src/components/importconfiguration/Import.vue:182
-#: src/components/stretches/Stretches.vue:205
+#: src/components/stretches/Stretches.vue:196
 #: src/components/systemconfiguration/PDFTemplates.vue:308
 #: src/components/usermanagement/Usermanagement.vue:242
 msgid "Delete"
@@ -419,7 +438,7 @@
 msgid "Delete Import"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:197
+#: src/components/stretches/Stretches.vue:188
 msgid "Delete Stretch"
 msgstr ""
 
@@ -447,8 +466,8 @@
 msgid "deleted successfully"
 msgstr ""
 
-#: src/components/sections/Sections.vue:206
-#: src/components/stretches/Stretches.vue:210
+#: src/components/sections/Sections.vue:197
+#: src/components/stretches/Stretches.vue:201
 msgid "Deleting "
 msgstr ""
 
@@ -476,11 +495,11 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/identify/formatter.js:62
+#: src/components/identify/formatter.js:68
 msgid "Distance Mark"
 msgstr ""
 
-#: src/components/identify/formatter.js:65
+#: src/components/identify/formatter.js:71
 msgid "Distance Mark ashore"
 msgstr ""
 
@@ -508,11 +527,11 @@
 msgid "Do you really want to delete the import with ID"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:199
+#: src/components/stretches/Stretches.vue:190
 msgid "Do you really want to delete this stretch:"
 msgstr ""
 
-#: src/components/identify/Identify.vue:76
+#: src/components/identify/Identify.vue:130
 msgid "Download"
 msgstr ""
 
@@ -687,15 +706,15 @@
 msgid "G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:96
+#: src/components/identify/formatter.js:102
 msgid "Gauge"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:195
+msgid "Gauge Forecast Confidence"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:124
-msgid "Gauge Forecast Confidence"
-msgstr ""
-
-#: src/components/systemconfiguration/DataAccuracy.vue:197
 msgid "Gauge Forecast vs. Reality"
 msgstr ""
 
@@ -724,10 +743,14 @@
 msgid "Generated by"
 msgstr ""
 
-#: src/components/identify/Identify.vue:106
+#: src/components/identify/Identify.vue:160
 msgid "Generated PDFs use font:"
 msgstr ""
 
+#: src/components/identify/Identify.vue:340
+msgid "Highest confidence"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1062
 msgid "hour"
 msgstr ""
@@ -754,7 +777,7 @@
 msgid "ID"
 msgstr ""
 
-#: src/components/identify/Identify.vue:179 src/components/map/MapPopup.vue:148
+#: src/components/identify/Identify.vue:240 src/components/map/MapPopup.vue:148
 #: src/components/toolbar/Identify.vue:49
 msgid "Identified Features"
 msgstr ""
@@ -862,11 +885,11 @@
 msgid "Latest Measurement"
 msgstr ""
 
-#: src/components/identify/formatter.js:100
+#: src/components/identify/formatter.js:106
 msgid "Latest Waterlevel"
 msgstr ""
 
-#: src/components/identify/formatter.js:99
+#: src/components/identify/formatter.js:105
 msgid "Latest Waterlevel Date"
 msgstr ""
 
@@ -875,7 +898,7 @@
 msgid "Layers"
 msgstr "Vrstvy"
 
-#: src/store/map.js:180
+#: src/store/map.js:187
 msgid "Length"
 msgstr ""
 
@@ -945,7 +968,7 @@
 msgid "Measurement"
 msgstr ""
 
-#: src/components/identify/formatter.js:102
+#: src/components/identify/formatter.js:108
 msgid "Measurement Count in Last 14 Days"
 msgstr ""
 
@@ -953,13 +976,13 @@
 msgid "measurements in the last 14 days."
 msgstr ""
 
-#: src/components/identify/formatter.js:79
-#: src/components/identify/formatter.js:90
+#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:96
 msgid "Min. G.W. Count in Last 14 Days"
 msgstr ""
 
-#: src/components/identify/formatter.js:77
-#: src/components/identify/formatter.js:88
+#: src/components/identify/formatter.js:83
+#: src/components/identify/formatter.js:94
 msgid "Min. Gauge Waterlevel Date"
 msgstr ""
 
@@ -989,12 +1012,26 @@
 
 #: src/components/Bottlenecks.vue:113 src/components/identify/formatter.js:6
 #: src/components/identify/formatter.js:7
-#: src/components/sections/Sections.vue:133
-#: src/components/stretches/Stretches.vue:133
+#: src/components/sections/Sections.vue:124
+#: src/components/stretches/Stretches.vue:124
 #: src/components/systemconfiguration/PDFTemplates.vue:117
 msgid "Name"
 msgstr "Názov"
 
+#: src/components/identify/Identify.vue:252
+#: src/components/identify/Identify.vue:253
+#: src/components/identify/Identify.vue:254
+#: src/components/identify/Identify.vue:266
+#: src/components/identify/Identify.vue:267
+#: src/components/identify/Identify.vue:268
+msgid "Nash-Sutcliffe"
+msgstr ""
+
+#: src/components/identify/Identify.vue:255
+#: src/components/identify/Identify.vue:269
+msgid "Nash-Sutcliffe not available"
+msgstr ""
+
 #: src/components/sections/SectionForm.vue:131
 #: src/components/stretches/StretchForm.vue:148
 msgid "National Object name"
@@ -1017,11 +1054,11 @@
 msgid "New import"
 msgstr ""
 
-#: src/components/sections/Sections.vue:75
+#: src/components/sections/Sections.vue:66
 msgid "New section"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:75
+#: src/components/stretches/Stretches.vue:66
 msgid "New stretch"
 msgstr ""
 
@@ -1035,7 +1072,7 @@
 msgid "No data available."
 msgstr ""
 
-#: src/components/identify/Identify.vue:68
+#: src/components/identify/Identify.vue:122
 msgid "No features identified."
 msgstr ""
 
@@ -1047,7 +1084,7 @@
 msgid "No style-changes"
 msgstr ""
 
-#: src/components/stretches/Stretches.vue:209
+#: src/components/stretches/Stretches.vue:200
 msgid "Not implemented"
 msgstr ""
 
@@ -1056,7 +1093,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:630
-#: src/components/gauge/Waterlevel.vue:725
+#: src/components/gauge/Waterlevel.vue:735
 msgid "Now"
 msgstr ""
 
@@ -1309,6 +1346,11 @@
 msgid "quarterly"
 msgstr ""
 
+#: src/components/systemconfiguration/DataAccuracy.vue:6
+#, fuzzy
+msgid "Recency of Bottleneck Surveys"
+msgstr "Brody a úžiny"
+
 #: src/components/Pdftool.vue:722
 msgid "Ref gauge"
 msgstr ""
@@ -1340,8 +1382,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:44
 #: src/components/systemconfiguration/DataAccuracy.vue:274
 #: src/components/systemconfiguration/MapLayers.vue:58
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:97
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:198
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:101
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:208
 msgid "Reset to defaults"
 msgstr ""
 
@@ -1357,8 +1399,8 @@
 msgid "retryDescription"
 msgstr ""
 
-#: src/components/sections/Sections.vue:142
-#: src/components/stretches/Stretches.vue:142
+#: src/components/sections/Sections.vue:133
+#: src/components/stretches/Stretches.vue:133
 msgid "Review pending import"
 msgstr ""
 
@@ -1371,6 +1413,10 @@
 msgid "Rotate Maps"
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:312
+msgid "Same value is used in multiple fields.  Please check"
+msgstr ""
+
 #: src/components/importconfiguration/ScheduledImports.vue:1074
 msgid "Saturday"
 msgstr ""
@@ -1405,7 +1451,7 @@
 msgid "Scheduled"
 msgstr ""
 
-#: src/components/identify/formatter.js:85
+#: src/components/identify/formatter.js:91
 msgid "Section"
 msgstr ""
 
@@ -1438,8 +1484,8 @@
 #: src/components/systemconfiguration/ColorSettings.vue:38
 #: src/components/systemconfiguration/DataAccuracy.vue:271
 #: src/components/systemconfiguration/MapLayers.vue:55
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:91
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:192
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:95
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:202
 msgid "Send"
 msgstr "Poslať"
 
@@ -1480,7 +1526,7 @@
 msgid "Simple"
 msgstr ""
 
-#: src/components/identify/Identify.vue:93
+#: src/components/identify/Identify.vue:147
 msgid ""
 "Some data ©\n"
 "        <a href=\"https://www.openstreetmap.org/copyright\">%{ name }</a>\n"
@@ -1499,7 +1545,7 @@
 msgid "Sounding Result"
 msgstr ""
 
-#: src/components/systemconfiguration/MorphologyClassbreaks.vue:102
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:109
 msgid "Sounding Result Comparison"
 msgstr ""
 
@@ -1507,8 +1553,8 @@
 msgid "Soundingresults"
 msgstr ""
 
-#: src/components/sections/Sections.vue:139
-#: src/components/stretches/Stretches.vue:139
+#: src/components/sections/Sections.vue:130
+#: src/components/stretches/Stretches.vue:130
 msgid "Source organization"
 msgstr ""
 
@@ -1522,11 +1568,11 @@
 msgid "Source orgranization"
 msgstr ""
 
-#: src/components/identify/Identify.vue:90
+#: src/components/identify/Identify.vue:144
 msgid "source-code"
 msgstr ""
 
-#: src/components/sections/Sections.vue:205
+#: src/components/sections/Sections.vue:196
 msgid "Staging Area"
 msgstr ""
 
@@ -1559,7 +1605,7 @@
 msgid "Status"
 msgstr ""
 
-#: src/components/identify/formatter.js:74
+#: src/components/identify/formatter.js:80
 msgid "Stretch"
 msgstr ""
 
@@ -1614,7 +1660,7 @@
 msgid "Testmail sent"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:132
+#: src/components/systemconfiguration/DataAccuracy.vue:203
 msgid ""
 "The highest confidence value is less than\n"
 "                <b>%{gm24} cm</b>\n"
@@ -1623,13 +1669,13 @@
 "                within last 72 hours."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:177
+#: src/components/systemconfiguration/DataAccuracy.vue:248
 msgid ""
 "The highest confidence value within the last 24 hours is\n"
 "                  greater than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:155
+#: src/components/systemconfiguration/DataAccuracy.vue:226
 msgid ""
 "The highest confidence value within the last 72 hours is\n"
 "                  greater than"
@@ -1662,19 +1708,19 @@
 "                respective bottleneck."
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:250
+#: src/components/systemconfiguration/DataAccuracy.vue:177
 msgid ""
 "The Nash-Sutcliffe coefficient for last 24 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:230
+#: src/components/systemconfiguration/DataAccuracy.vue:157
 msgid ""
 "The Nash-Sutcliffe coefficient for last 72 hours is less\n"
 "                  than"
 msgstr ""
 
-#: src/components/systemconfiguration/DataAccuracy.vue:205
+#: src/components/systemconfiguration/DataAccuracy.vue:132
 msgid ""
 "The Nash-Sutcliffe coefficient is greater than\n"
 "                <b>%{nsc24}</b>\n"
@@ -1687,6 +1733,10 @@
 msgid "The provided template has no name property."
 msgstr ""
 
+#: src/components/systemconfiguration/MorphologyClassbreaks.vue:331
+msgid "There are invalid classbreak values. Please check"
+msgstr ""
+
 #: src/components/systemconfiguration/DataAccuracy.vue:88
 msgid "There are less than"
 msgstr ""
@@ -1698,11 +1748,11 @@
 #: src/components/fairway/Profiles.vue:423
 #: src/components/importconfiguration/types/Soundingresults.vue:232
 #: src/components/importconfiguration/types/Soundingresults.vue:251
-#: src/components/layers/Layerselect.vue:67
+#: src/components/layers/Layerselect.vue:68
 msgid "this"
 msgstr ""
 
-#: src/components/identify/Identify.vue:84
+#: src/components/identify/Identify.vue:138
 msgid ""
 "This app uses <i>gemma</i>, which is Free Software under <br/>\n"
 "        %{ license } without warranty, see docs for details."
@@ -1789,8 +1839,8 @@
 msgid "URL"
 msgstr ""
 
-#: src/components/identify/Identify.vue:80
-#: src/components/identify/Identify.vue:182
+#: src/components/identify/Identify.vue:134
+#: src/components/identify/Identify.vue:243
 msgid "User Manual"
 msgstr ""
 
@@ -1807,7 +1857,7 @@
 msgid "Users"
 msgstr ""
 
-#: src/components/identify/Identify.vue:99
+#: src/components/identify/Identify.vue:153
 msgid ""
 "Uses\n"
 "        <a href=\"https://download.geonames.org/export/dump/readme.txt"
@@ -1833,7 +1883,7 @@
 msgstr ""
 
 #: src/components/gauge/HydrologicalConditions.vue:663
-#: src/components/gauge/Waterlevel.vue:611
+#: src/components/gauge/Waterlevel.vue:613
 msgid "Waterlevel [m]"
 msgstr ""
 
@@ -1854,7 +1904,7 @@
 msgid "Waterway area"
 msgstr ""
 
-#: src/components/identify/formatter.js:59
+#: src/components/identify/formatter.js:65
 msgid "Waterway Area"
 msgstr ""
 
@@ -1862,7 +1912,7 @@
 msgid "Waterway axis"
 msgstr ""
 
-#: src/components/identify/formatter.js:68
+#: src/components/identify/formatter.js:74
 msgid "Waterway Axis"
 msgstr ""
 
@@ -1870,7 +1920,7 @@
 msgid "Waterway gauges"
 msgstr ""
 
-#: src/components/identify/formatter.js:71
+#: src/components/identify/formatter.js:77
 msgid "Waterway Profile"
 msgstr ""
 
--- a/client/src/store/fairwayavailability.js	Thu Sep 05 16:55:40 2019 +0200
+++ b/client/src/store/fairwayavailability.js	Thu Sep 05 17:02:03 2019 +0200
@@ -4,7 +4,7 @@
  * SPDX-License-Identifier: AGPL-3.0-or-later
  * License-Filename: LICENSES/AGPL-3.0.txt
  *
- * Copyright (C) 2018 by via donau
+ * Copyright (C) 2018, 2019 by via donau
  *   – Österreichische Wasserstraßen-Gesellschaft mbH
  * Software engineering by Intevation GmbH
  *
@@ -178,9 +178,6 @@
     setSelectedFairwayAvailability: (state, feature) => {
       state.selectedFairwayAvailabilityFeature = feature;
     },
-    setFwData: (state, fwData) => {
-      state.fwData = fwData;
-    },
     setFwLNWLData: (state, fwLNWLData) => {
       state.fwLNWLData = fwLNWLData;
     },
@@ -195,8 +192,17 @@
         state.fwLNWLOverviewData.splice(existingIndex, 1);
       state.fwLNWLOverviewData.push(data);
     },
-    setLegend: (state, header) => {
-      const headerEntries = header.split(",");
+    setLegendLNWL: (state, headerLNWL) => {
+      state.headerLNWL = headerLNWL;
+    },
+    // See docs/developers.md for an example how to directly
+    // call this method for testing.
+    setAvailableFairwayDepthData: (state, data) => {
+      state.csv = data;
+      const csv = data.split("\n").filter(x => x !== ""); //omit empty lines
+
+      // setLegend
+      const headerEntries = csv.shift().split(",");
       headerEntries.shift();
       headerEntries.shift();
       state.legend = headerEntries.map(x => {
@@ -204,9 +210,8 @@
         entry = entry.replace("[h]", "").trim(); // omit unit
         return entry;
       });
-    },
-    setLegendLNWL: (state, headerLNWL) => {
-      this.headerLNWL = headerLNWL;
+
+      state.fwData = transformAFD(csv);
     }
   },
   actions: {
@@ -247,12 +252,7 @@
           headers: { "X-Gemma-Auth": localStorage.getItem("token") }
         })
           .then(response => {
-            const { data } = response;
-            commit("setCSV", data);
-            const csv = data.split("\n").filter(x => x !== ""); //omit empty lines
-            commit("setLegend", csv.shift());
-            let transformed = transformAFD(csv);
-            commit("setFwData", transformed);
+            commit("setAvailableFairwayDepthData", response.data);
             resolve(response);
           })
           .catch(error => {
--- a/pkg/controllers/routes.go	Thu Sep 05 16:55:40 2019 +0200
+++ b/pkg/controllers/routes.go	Thu Sep 05 17:02:03 2019 +0200
@@ -229,6 +229,9 @@
 	api.Handle("/imports/ugm", waterwayAdmin(
 		importUploadedGaugeMeasurement())).Methods(http.MethodPost)
 
+	api.Handle("/imports/stsh", sysAdmin(
+		importUploadedStretchShape())).Methods(http.MethodPost)
+
 	api.Handle("/imports/{kind:st}", sysAdmin(&mw.JSONHandler{
 		Input:  importModel,
 		Handle: manualImport,
--- a/pkg/controllers/shapestretches.go	Thu Sep 05 16:55:40 2019 +0200
+++ b/pkg/controllers/shapestretches.go	Thu Sep 05 17:02:03 2019 +0200
@@ -23,6 +23,7 @@
 	"net/http"
 	"os"
 	"path/filepath"
+	"strings"
 	"time"
 
 	"github.com/gorilla/mux"
@@ -75,8 +76,6 @@
 		}
 	}
 
-	log.Printf("info: total number points: %d\n", n)
-
 	return ps
 }
 
@@ -84,24 +83,24 @@
 
 	points := flattenPoints(mp)
 
-	p := &shp.Polygon{}
-
 	var numParts int
 	for _, pl := range mp {
 		numParts += len(pl)
 	}
 
-	log.Printf("info: number parts: %d\n", numParts)
-
+	p := &shp.Polygon{}
 	p.NumParts = int32(numParts)
 	p.NumPoints = int32(len(points))
 	p.Parts = make([]int32, numParts)
 
 	var marker int32
-
-	for i, pl := range mp {
-		p.Parts[i] = marker
-		marker += int32(len(pl))
+	var i int
+	for _, pl := range mp {
+		for _, r := range pl {
+			p.Parts[i] = marker
+			i++
+			marker += int32(len(r))
+		}
 	}
 
 	p.Points = points
@@ -216,12 +215,43 @@
 		}
 		defer writer.Close()
 
-		// TODO: Write geometry
+		fields := []shp.Field{
+			shp.StringField("NAME", 50),
+			shp.StringField("OBJNAM", 50),
+			shp.StringField("NOBJNAM", 50),
+			shp.StringField("LOWER", 25),
+			shp.StringField("UPPER", 25),
+			shp.StringField("SOURCE", 50),
+			shp.StringField("DATEINFO", 25),
+			shp.StringField("COUNTRIES", 50),
+		}
+
+		writer.SetFields(fields)
+
 		p := asShpPolygon(geom)
 
 		writer.Write(p)
 
-		return nil
+		write := func(field int, v interface{}) {
+			if err == nil {
+				err = writer.WriteAttribute(0, field, v)
+			}
+		}
+
+		write(0, name)
+		write(1, objnam)
+		if nobjnam.Valid {
+			write(2, nobjnam.String)
+		}
+		write(3, lower)
+		write(4, upper)
+		write(5, source)
+		write(6, dateInfo.Format(time.RFC3339))
+		if len(countries) > 0 {
+			write(7, strings.Join(countries, ","))
+		}
+
+		return err
 	}(); err != nil {
 		http.Error(
 			rw, fmt.Sprintf("creating shapefile failed: %v.", err),
--- a/pkg/controllers/uploadedimports.go	Thu Sep 05 16:55:40 2019 +0200
+++ b/pkg/controllers/uploadedimports.go	Thu Sep 05 17:02:03 2019 +0200
@@ -135,6 +135,16 @@
 	)
 }
 
+func importUploadedStretchShape() http.HandlerFunc {
+	return uploadedImport(
+		imports.STSHJobKind,
+		"stretch.zip",
+		func(_ *http.Request, dir string) (imports.Job, error) {
+			return &imports.StretchShape{Dir: dir}, nil
+		},
+	)
+}
+
 func (bup badUploadParameterError) Error() string {
 	return string(bup)
 }
--- a/pkg/geoserver/templates.go	Thu Sep 05 16:55:40 2019 +0200
+++ b/pkg/geoserver/templates.go	Thu Sep 05 17:02:03 2019 +0200
@@ -11,6 +11,7 @@
 // Author(s):
 //  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
 //  * Markus Kottländer <markus.kottlaender@intevation.de>
+//  * Bernhard Reiter <bernhard.reiter@intevation.de>
 
 package geoserver
 
@@ -18,6 +19,7 @@
 	"context"
 	"database/sql"
 	"regexp"
+	"strconv"
 	"strings"
 	"text/template"
 
@@ -54,6 +56,9 @@
 }
 
 func templateConfigValues(tmplTxt string) (string, error) {
+	// As SLDs cannot handle opacity as hex part of the color setting
+	// we split out the 7-8 chars of keys ending on "_fill" color settings
+	// into keys ending on "_fill_opacity"
 	tmpl, err := template.New("template").Parse(tmplTxt)
 	if err != nil {
 		return "", err
@@ -61,11 +66,45 @@
 
 	// Try to extract the needed keys from the template.
 	keys := extractKeysFromTemplate(tmplTxt)
+
+	// filter out keys ending on "_opacity" and put them in their own slice
+	var opacityKeys []string
+	n := 0
+	for _, key := range keys {
+		if strings.HasSuffix(key, "_opacity") {
+			opacityKeys = append(opacityKeys, key)
+		} else {
+			keys[n] = key
+			n++
+		}
+	}
+	keys = keys[:n]
+
 	kv, err := loadConfigValues(keys)
 	if err != nil {
 		return "", err
 	}
 
+	// if there convert opacity hex value into float between 0-1
+	// otherwise just use 1.0
+	for _, opacityKey := range opacityKeys {
+		fillKey := opacityKey[0 : len(opacityKey)-8]
+		fillValue := kv[fillKey]
+		if fillValue != "" && len(fillValue) == 9 {
+			opacity, err := strconv.ParseInt(fillValue[7:9], 16, 0)
+			if err == nil {
+				kv[opacityKey] = strconv.FormatFloat(
+					float64(opacity)/255, 'f', 2, 64)
+				kv[fillKey] = kv[fillKey][0:7]
+			} else {
+				return "", err
+			}
+
+		} else {
+			kv[opacityKey] = "1.0"
+		}
+	}
+
 	var buf strings.Builder
 	if err = tmpl.Execute(&buf, kv); err != nil {
 		return "", err
--- a/pkg/imports/st.go	Thu Sep 05 16:55:40 2019 +0200
+++ b/pkg/imports/st.go	Thu Sep 05 17:02:03 2019 +0200
@@ -40,9 +40,7 @@
 
 type stJobCreator struct{}
 
-func init() {
-	RegisterJobCreator(STJobKind, stJobCreator{})
-}
+func init() { RegisterJobCreator(STJobKind, stJobCreator{}) }
 
 func (stJobCreator) Description() string { return "stretch" }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/imports/stsh.go	Thu Sep 05 17:02:03 2019 +0200
@@ -0,0 +1,368 @@
+// This is Free Software under GNU Affero General Public License v >= 3.0
+// without warranty, see README.md and license for details.
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// License-Filename: LICENSES/AGPL-3.0.txt
+//
+// Copyright (C) 2019 by via donau
+//   – Österreichische Wasserstraßen-Gesellschaft mbH
+// Software engineering by Intevation GmbH
+//
+// Author(s):
+//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+package imports
+
+import (
+	"archive/zip"
+	"context"
+	"database/sql"
+	"errors"
+	"fmt"
+	"os"
+	"path"
+	"path/filepath"
+	"strings"
+	"time"
+
+	shp "github.com/jonas-p/go-shp"
+
+	"gemma.intevation.de/gemma/pkg/common"
+	"gemma.intevation.de/gemma/pkg/models"
+)
+
+type StretchShape struct {
+	Dir string `json:"dir"`
+}
+
+const STSHJobKind JobKind = "stsh"
+
+type stshJobCreator struct{}
+
+func init() { RegisterJobCreator(STSHJobKind, stshJobCreator{}) }
+
+func (stshJobCreator) Description() string { return "stretch from shape" }
+
+func (stshJobCreator) AutoAccept() bool { return false }
+
+func (stshJobCreator) Create() Job { return new(StretchShape) }
+
+func (stshJobCreator) Depends() [2][]string {
+	return [2][]string{
+		{"stretches", "stretch_countries"},
+		{},
+	}
+}
+
+const (
+	stshInsertSQL = `
+INSERT INTO waterway.stretches (
+  name,
+  stretch,
+  area,
+  objnam,
+  nobjnam,
+  date_info,
+  source_organization
+) VALUES (
+  $1,
+  isrsrange(isrs_fromText($2), isrs_fromText($3)),
+  ST_GeomFromWKB($4, 4326),
+  $5,
+  $6,
+  $7,
+  $8)
+RETURNING id`
+)
+
+// StageDone is merely the same as for the normal stretch import.
+func (stshJobCreator) StageDone(
+	ctx context.Context,
+	tx *sql.Tx,
+	id int64,
+) error {
+	return stJobCreator{}.StageDone(ctx, tx, id)
+}
+
+func (stsh *StretchShape) CleanUp() error {
+	return os.RemoveAll(stsh.Dir)
+}
+
+func fixAttribute(s string) string {
+	return strings.TrimRight(s, "\x00")
+}
+
+type stretchSummary struct {
+	ID        int64                  `json:"id"`
+	Name      string                 `json:"name"`
+	From      string                 `json:"from"`
+	To        string                 `json:"to"`
+	ObjNam    string                 `json:"objnam"`
+	NObjNam   *string                `json:"nobjnam"`
+	Date      models.Date            `json:"date-info"`
+	Countries models.UniqueCountries `json:"countries"`
+}
+
+func parseUniqueCountries(s string) (models.UniqueCountries, error) {
+	unique := map[models.Country]struct{}{}
+	var countries models.UniqueCountries
+	for _, c := range strings.Split(s, ",") {
+		if c = strings.ToUpper(strings.TrimSpace(c)); c == "" {
+			continue
+		}
+		n := models.Country(c)
+		if !n.Valid() {
+			return nil, fmt.Errorf("'%s' is not a valid country code", c)
+		}
+		if _, found := unique[n]; found {
+			return nil, fmt.Errorf("'%s' is not a unique country code", c)
+		}
+		countries = append(countries, n)
+		unique[n] = struct{}{}
+	}
+	return countries, nil
+}
+
+func (stsh *StretchShape) Do(
+	ctx context.Context,
+	importID int64,
+	conn *sql.Conn,
+	feedback Feedback,
+) (interface{}, error) {
+
+	start := time.Now()
+	defer func() {
+		feedback.Info("Storing stretches from shape file took %v.",
+			time.Since(start))
+	}()
+
+	zpath := filepath.Join(stsh.Dir, "stretch.zip")
+
+	z, err := zip.OpenReader(zpath)
+	if err != nil {
+		return nil, err
+	}
+	defer z.Close()
+
+	shpF := common.FindInZIP(z, ".shp")
+	if shpF == nil {
+		return nil, errors.New("no SHP file found in ZIP")
+	}
+	prefix := strings.TrimSuffix(shpF.Name, path.Ext(shpF.Name))
+	dbfF := common.FindInZIP(z, prefix+".dbf")
+	if dbfF == nil {
+		return nil, fmt.Errorf("no DBF file found for %s", shpF.Name)
+	}
+
+	shpR, err := shpF.Open()
+	if err != nil {
+		return nil, err
+	}
+
+	dbfR, err := dbfF.Open()
+	if err != nil {
+		shpR.Close()
+		return nil, err
+	}
+	sr := shp.SequentialReaderFromExt(shpR, dbfR)
+	defer sr.Close()
+
+	fields := sr.Fields()
+
+	// Map the attribute column indices.
+
+	var (
+		nameIdx      = -1
+		objnamIdx    = -1
+		nobjnamIdx   = -1
+		lowerIdx     = -1
+		upperIdx     = -1
+		sourceIdx    = -1
+		dateInfoIdx  = -1
+		countriesIdx = -1
+	)
+
+	type index struct {
+		name string
+		idx  *int
+	}
+
+	indices := []index{
+		{"name", &nameIdx},
+		{"objnam", &objnamIdx},
+		{"nobjnam", &nobjnamIdx},
+		{"lower", &lowerIdx},
+		{"upper", &upperIdx},
+		{"source", &sourceIdx},
+		{"source", &sourceIdx},
+		{"dateinfo", &dateInfoIdx},
+		{"countries", &countriesIdx},
+	}
+
+nextField:
+	for i := range fields {
+		name := strings.ToLower(fields[i].String())
+		for j := range indices {
+			if name == indices[j].name {
+				*indices[j].idx = i
+				continue nextField
+			}
+		}
+	}
+
+	var missingFields []string
+
+	for i := range indices {
+		if *indices[i].idx == -1 {
+			missingFields = append(missingFields, indices[i].name)
+		}
+	}
+
+	if len(missingFields) > 0 {
+		return nil, fmt.Errorf("missing fields in attributes: %s",
+			strings.Join(missingFields, ", "))
+	}
+
+	// Now we have ensured that all columns are in place
+	// so start extracting data from the shape file.
+
+	tx, err := conn.BeginTx(ctx, nil)
+	if err != nil {
+		return nil, err
+	}
+	defer tx.Rollback()
+
+	insStmt, err := tx.PrepareContext(ctx, stshInsertSQL)
+	if err != nil {
+		return nil, err
+	}
+	defer insStmt.Close()
+
+	insCountryStmt, err := tx.PrepareContext(ctx, stInsertCountrySQL)
+	if err != nil {
+		return nil, err
+	}
+	defer insCountryStmt.Close()
+
+	trackStmt, err := tx.PrepareContext(ctx, trackImportSQL)
+	if err != nil {
+		return nil, err
+	}
+	defer trackStmt.Close()
+
+	var stretches []*stretchSummary
+
+	for sr.Next() {
+
+		_, p := sr.Shape()
+		if p == nil {
+			feedback.Warn("Invalid NULL geometry found.")
+			continue
+		}
+		poly, err := shapeToPolygon(p)
+		if err != nil {
+			feedback.Warn("Invalid geometry found: %v.", err)
+			continue
+		}
+
+		var (
+			name     = fixAttribute(sr.Attribute(nameIdx))
+			objnam   = fixAttribute(sr.Attribute(objnamIdx))
+			nobjnam  = fixAttribute(sr.Attribute(nobjnamIdx))
+			lower    = fixAttribute(sr.Attribute(lowerIdx))
+			upper    = fixAttribute(sr.Attribute(upperIdx))
+			dateInfo = fixAttribute(sr.Attribute(dateInfoIdx))
+			source   = fixAttribute(sr.Attribute(sourceIdx))
+			cnts     = fixAttribute(sr.Attribute(countriesIdx))
+		)
+
+		feedback.Info("Importing stretch %s (%s - %s).",
+			name, lower, upper)
+
+		date, err := common.ParseTime(dateInfo)
+		if err != nil {
+			feedback.Warn("Invalid time value: %v.", err)
+			continue
+		}
+
+		countries, err := parseUniqueCountries(cnts)
+		if err != nil {
+			feedback.Warn("Countries: %v.", err)
+			continue
+		}
+
+		var nobjnamNull sql.NullString
+		if nobjnam != "" {
+			nobjnamNull = sql.NullString{
+				String: nobjnam,
+				Valid:  true,
+			}
+		}
+
+		// Convert to a multi polygon.
+		area := poly.MultiPolygonGeom().AsWKB()
+
+		var id int64
+
+		if err := insStmt.QueryRowContext(
+			ctx,
+			name,
+			lower, upper,
+			area,
+			objnam,
+			nobjnamNull,
+			date,
+			source,
+		).Scan(&id); err != nil {
+			return nil, err
+		}
+
+		// Store the countries
+		for _, country := range countries {
+			if _, err := insCountryStmt.ExecContext(ctx, country); err != nil {
+				return nil, err
+			}
+		}
+
+		// Finally track the stretch
+
+		if _, err := trackStmt.ExecContext(
+			ctx,
+			importID,
+			"waterway.stretches",
+			id,
+		); err != nil {
+			return nil, err
+		}
+
+		stretch := &stretchSummary{
+			ID:        id,
+			Name:      name,
+			From:      lower,
+			To:        upper,
+			ObjNam:    objnam,
+			Date:      models.Date{date},
+			Countries: countries,
+		}
+
+		if nobjnamNull.Valid {
+			stretch.NObjNam = &nobjnamNull.String
+		}
+
+		stretches = append(stretches, stretch)
+	}
+
+	if err := sr.Err(); err != nil {
+		return nil, err
+	}
+
+	if len(stretches) == 0 {
+		return nil, UnchangedError("No stretches written.")
+	}
+
+	if err := tx.Commit(); err != nil {
+		return nil, err
+	}
+
+	return stretches, nil
+}
--- a/pkg/imports/wkb.go	Thu Sep 05 16:55:40 2019 +0200
+++ b/pkg/imports/wkb.go	Thu Sep 05 17:02:03 2019 +0200
@@ -55,6 +55,15 @@
 	return buf.Bytes()
 }
 
+func (ls lineSlice) LinearRingGeom() wkb.LinearRingGeom {
+	lr := make(wkb.LinearRingGeom, len(ls))
+	for i, v := range ls {
+		lr[i].X = v[0]
+		lr[i].Y = v[1]
+	}
+	return lr
+}
+
 func (p pointSlice) asWKB() []byte {
 
 	size := 1 + 4 + 2*8
@@ -147,3 +156,27 @@
 	}
 	return out
 }
+
+func (ps polygonSlice) MultiPolygonGeom() wkb.MultiPolygonGeom {
+
+	var mp wkb.MultiPolygonGeom
+	var curr wkb.PolygonGeom
+
+	for _, r := range ps {
+		lr := lineSlice(r).LinearRingGeom()
+		// A counter clockwise ring starts a new polygon.
+		if lr.CCW() {
+			if len(curr) > 0 {
+				mp = append(mp, curr)
+				curr = wkb.PolygonGeom{}
+			}
+		}
+		curr = append(curr, lr)
+	}
+
+	if len(curr) > 0 {
+		mp = append(mp, curr)
+	}
+
+	return mp
+}
--- a/pkg/models/common.go	Thu Sep 05 16:55:40 2019 +0200
+++ b/pkg/models/common.go	Thu Sep 05 17:02:03 2019 +0200
@@ -81,6 +81,16 @@
 	}
 )
 
+// Valid checks if the given country is a known one.
+func (c Country) Valid() bool {
+	for _, v := range validCountries {
+		if string(c) == v {
+			return true
+		}
+	}
+	return false
+}
+
 // UnmarshalJSON ensures that the given string forms a valid
 // two letter country code.
 func (c *Country) UnmarshalJSON(data []byte) error {
--- a/pkg/wkb/data.go	Thu Sep 05 16:55:40 2019 +0200
+++ b/pkg/wkb/data.go	Thu Sep 05 17:02:03 2019 +0200
@@ -17,7 +17,6 @@
 	"bytes"
 	"encoding/binary"
 	"fmt"
-	"log"
 	"math"
 )
 
@@ -31,6 +30,41 @@
 	MultiPolygonGeom []PolygonGeom
 )
 
+func (mpg MultiPolygonGeom) AsWKB() []byte {
+
+	size := 1 + 4 + 4
+	for _, pg := range mpg {
+		size += 1 + 4 + 4
+		for _, r := range pg {
+			size += 4 + 2*8*len(r)
+		}
+	}
+
+	buf := bytes.NewBuffer(make([]byte, 0, size))
+
+	binary.Write(buf, binary.LittleEndian, NDR)
+	binary.Write(buf, binary.LittleEndian, MultiPolygon)
+	binary.Write(buf, binary.LittleEndian, uint32(len(mpg)))
+
+	for _, pg := range mpg {
+		binary.Write(buf, binary.LittleEndian, NDR)
+		binary.Write(buf, binary.LittleEndian, Polygon)
+		binary.Write(buf, binary.LittleEndian, uint32(len(pg)))
+
+		for _, r := range pg {
+			binary.Write(buf, binary.LittleEndian, uint32(len(r)))
+			for _, p := range r {
+				x := math.Float64bits(p.X)
+				y := math.Float64bits(p.Y)
+				binary.Write(buf, binary.LittleEndian, x)
+				binary.Write(buf, binary.LittleEndian, y)
+			}
+		}
+	}
+
+	return buf.Bytes()
+}
+
 func (mpg *MultiPolygonGeom) FromWKB(data []byte) error {
 	r := bytes.NewReader(data)
 
@@ -56,11 +90,10 @@
 		return fmt.Errorf("unknown geometry type %x", geomType)
 	}
 
-	var numPolygons int32
+	var numPolygons uint32
 	if err := binary.Read(r, order, &numPolygons); err != nil {
 		return err
 	}
-	log.Printf("info: num polygons: %d\n", numPolygons)
 
 	polygons := make([]PolygonGeom, numPolygons)
 
@@ -87,7 +120,6 @@
 		if err := binary.Read(r, order, &numRings); err != nil {
 			return err
 		}
-		log.Printf("info: num rings: %d\n", numRings)
 
 		rings := make([]LinearRingGeom, numRings)
 
@@ -96,7 +128,6 @@
 			if err := binary.Read(r, order, &numPoints); err != nil {
 				return err
 			}
-			log.Printf("info: num points: %d\n", numPoints)
 			points := make([]PointGeom, numPoints)
 
 			for k := range points {
@@ -120,3 +151,12 @@
 	*mpg = polygons
 	return nil
 }
+
+func (lr LinearRingGeom) CCW() bool {
+	var sum float64
+	for i, v1 := range lr {
+		v2 := lr[(i+1)%len(lr)]
+		sum += (v2.X - v1.X) * (v2.Y + v1.Y)
+	}
+	return sum > 0
+}
--- a/schema/README.md	Thu Sep 05 16:55:40 2019 +0200
+++ b/schema/README.md	Thu Sep 05 17:02:03 2019 +0200
@@ -4,3 +4,5 @@
 to be more similiar to UML and leave out some less useful labels.
 
 See  `../docker/README.md`
+
+Look at `updates/README.md` to how databases are updated.
--- a/schema/default_sysconfig.sql	Thu Sep 05 16:55:40 2019 +0200
+++ b/schema/default_sysconfig.sql	Thu Sep 05 17:02:03 2019 +0200
@@ -47,11 +47,11 @@
 INSERT INTO sys_admin.system_config VALUES ('fairwaydimensionslos3_fill','#ffffff66');
 INSERT INTO sys_admin.system_config VALUES ('waterwayprofiles_stroke','#0000ff80');
 
-INSERT INTO sys_admin.system_config VALUES ('distance_marks_fill', '#ff9999');
+INSERT INTO sys_admin.system_config VALUES ('distance_marks_fill', '#ff99994d');
 INSERT INTO sys_admin.system_config VALUES ('distance_marks_stroke', '#6666ff');
-INSERT INTO sys_admin.system_config VALUES ('distance_marks_ashore_fill', '#8888FF');
-INSERT INTO sys_admin.system_config VALUES ('distance_marks_ashore_stroke', '#3333FF');
-INSERT INTO sys_admin.system_config VALUES ('waterway_axis_stroke', '#0000FF');
+INSERT INTO sys_admin.system_config VALUES ('distance_marks_ashore_fill', '#8888ff1a');
+INSERT INTO sys_admin.system_config VALUES ('distance_marks_ashore_stroke', '#3333ff');
+INSERT INTO sys_admin.system_config VALUES ('waterway_axis_stroke', '#0000ff');
 INSERT INTO sys_admin.system_config VALUES ('waterway_area_stroke', '#006600');
 
 COMMIT;
--- a/schema/updates/1111/01.styles_config.sql	Thu Sep 05 16:55:40 2019 +0200
+++ b/schema/updates/1111/01.styles_config.sql	Thu Sep 05 17:02:03 2019 +0200
@@ -1,4 +1,7 @@
-INSERT INTO sys_admin.system_config VALUES ('distance_marks_ashore_fill', '#8888FF') ON CONFLICT (config_key) DO NOTHING;
-INSERT INTO sys_admin.system_config VALUES ('distance_marks_ashore_stroke', '#3333FF') ON CONFLICT (config_key) DO NOTHING;
-INSERT INTO sys_admin.system_config VALUES ('waterway_axis_stroke', '#0000FF') ON CONFLICT (config_key) DO NOTHING;
-INSERT INTO sys_admin.system_config VALUES ('waterway_area_stroke', '#006600') ON CONFLICT (config_key) DO NOTHING;
\ No newline at end of file
+INSERT INTO sys_admin.system_config VALUES ('distance_marks_fill', '#ff99994d') ON CONFLICT (config_key) DO NOTHING;
+INSERT INTO sys_admin.system_config VALUES ('distance_marks_ashore_fill', '#8888ff1a') ON CONFLICT (config_key) DO NOTHING;
+INSERT INTO sys_admin.system_config VALUES ('distance_marks_ashore_stroke', '#3333ff') ON CONFLICT (config_key) DO NOTHING;
+INSERT INTO sys_admin.system_config VALUES ('waterway_axis_stroke', '#0000ff') ON CONFLICT (config_key) DO NOTHING;
+INSERT INTO sys_admin.system_config VALUES ('waterway_area_stroke', '#006600') ON CONFLICT (config_key) DO NOTHING;
+
+-- The user changed styles will be overwritten with the default values.
\ No newline at end of file
--- a/schema/updates/README.md	Thu Sep 05 16:55:40 2019 +0200
+++ b/schema/updates/README.md	Thu Sep 05 17:02:03 2019 +0200
@@ -69,4 +69,4 @@
   database updated using `schema/update-db.sh`!
 
 - Update `schema/version.sql`, so that it reflects the new schema
-  version you just created.
+  version you've just created.