diff --git a/Applications/DataExplorer/DataView/DiagramView/CMakeLists.txt b/Applications/DataExplorer/DataView/DiagramView/CMakeLists.txt
index b8030c4a2fa2098356e7d362983cf3214b4a7167..558733cebedff970f6126e98be5149782a6e87d5 100644
--- a/Applications/DataExplorer/DataView/DiagramView/CMakeLists.txt
+++ b/Applications/DataExplorer/DataView/DiagramView/CMakeLists.txt
@@ -10,6 +10,7 @@ set(SOURCES
 
 set(HEADERS
     DiagramList.h
+    GetDateTime.h
     QArrow.h
     QGraphicsGrid.h
     DiagramScene.h
diff --git a/Applications/DataExplorer/DataView/DiagramView/DiagramList.cpp b/Applications/DataExplorer/DataView/DiagramView/DiagramList.cpp
index 8b2ef69a036071666254b406fbe11936e2b626f4..0083b08a56a84d28ab2841c4fd4facd864ed41e6 100644
--- a/Applications/DataExplorer/DataView/DiagramView/DiagramList.cpp
+++ b/Applications/DataExplorer/DataView/DiagramView/DiagramList.cpp
@@ -13,6 +13,7 @@
  */
 
 #include "DiagramList.h"
+#include "GetDateTime.h"
 
 #include <logog/include/logog.hpp>
 
@@ -171,9 +172,6 @@ int DiagramList::readList(const QString &path, std::vector<DiagramList*> &lists)
         }
 
         bool first_loop(true);
-        int numberOfSecs(0);
-        double value(0);
-        QString stringDate("");
         QDateTime startDate, currentDate;
         unsigned line_count (1);
 
@@ -184,7 +182,7 @@ int DiagramList::readList(const QString &path, std::vector<DiagramList*> &lists)
             fields = line.split('\t');
             if (fields.size() >= (nLists + 1))
             {
-                stringDate = fields.takeFirst();
+                QString const stringDate = fields.takeFirst();
                 currentDate = getDateTime(stringDate);
                 if (first_loop)
                 {
@@ -194,15 +192,12 @@ int DiagramList::readList(const QString &path, std::vector<DiagramList*> &lists)
                     first_loop = false;
                 }
 
-                numberOfSecs = startDate.secsTo(currentDate);
-
+                float const numberOfSecs = static_cast<float>(startDate.secsTo(currentDate));
                 for (int i = 0; i < nLists; i++)
                 {
-                    value =
-                        strtod(BaseLib::replaceString(
-                                   ",", ".", fields.takeFirst().toStdString())
-                                   .c_str(),
-                               nullptr);
+                    float const value = static_cast<float>(strtod(
+                        BaseLib::replaceString(",", ".", fields.takeFirst().toStdString()).c_str(),
+                        nullptr));
                     lists[i]->addNextPoint(numberOfSecs,value);
                 }
             }
@@ -266,12 +261,12 @@ int DiagramList::readList(const SensorData* data, std::vector<DiagramList*> &lis
         if (is_date)
         {
             l->setXUnit("day");
-            QDateTime startDate(getDateTime(QString::fromStdString(BaseLib::int2date(time_steps[0]))));
+            QDateTime const startDate(getDateTime(BaseLib::int2date(time_steps[0])));
             lists[i]->setStartDate(startDate);
-            int numberOfSecs(0);
             for (std::size_t j = 0; j < nValues; j++)
             {
-                numberOfSecs = startDate.secsTo(getDateTime(QString::fromStdString(BaseLib::int2date(time_steps[j]))));
+                QDateTime const currentDate(getDateTime(BaseLib::int2date(time_steps[j])));
+                float numberOfSecs = static_cast<float>(startDate.secsTo(currentDate));
                 lists[i]->addNextPoint(numberOfSecs, (*time_series)[j]);
             }
         }
@@ -279,7 +274,8 @@ int DiagramList::readList(const SensorData* data, std::vector<DiagramList*> &lis
         {
             l->setXUnit("time step");
             for (std::size_t j = 0; j < nValues; j++)
-                lists[i]->addNextPoint(time_steps[j], (*time_series)[j]);
+                lists[i]->addNextPoint(static_cast<float>(time_steps[j]),
+                                       (*time_series)[j]);
         }
 
         lists[i]->update();
@@ -288,9 +284,31 @@ int DiagramList::readList(const SensorData* data, std::vector<DiagramList*> &lis
     return nLists;
 }
 
-void DiagramList::setList(std::vector< std::pair<QDateTime, float> > coords)
+void DiagramList::truncateToRange(QDateTime const& start, QDateTime const& end)
+{
+    float start_secs = static_cast<float>(_startDate.secsTo(start));
+    if (start_secs < 0)
+        start_secs = 0;
+    float end_secs = static_cast<float>(_startDate.secsTo(end));
+    if (end_secs < start_secs)
+        end_secs = _coords.back().first;
+
+    if (start_secs == 0 && end_secs == _coords.back().first)
+        return;
+
+    _coords.erase(std::remove_if(_coords.begin(), _coords.end(),
+        [&](std::pair<float, float> const& c){return (c.first<start_secs || c.first>end_secs);}),
+        _coords.end());
+    _startDate = start;
+    for (auto& c : _coords)
+        c.first -= start_secs;
+    update();
+}
+
+void DiagramList::setList(std::vector<std::pair<QDateTime, float>> const& coords)
 {
-    int numberOfDays;
+    if (coords.empty())
+        return;
 
     this->_startDate = coords[0].first;
     _coords.emplace_back(0.0f, coords[0].second);
@@ -298,16 +316,19 @@ void DiagramList::setList(std::vector< std::pair<QDateTime, float> > coords)
     std::size_t nCoords = coords.size();
     for (std::size_t i = 1; i < nCoords; i++)
     {
-        numberOfDays = this->_startDate.daysTo(coords[i].first);
-        _coords.emplace_back(static_cast<float>(numberOfDays),
-                             coords[i].second);
+        _coords.emplace_back(
+            static_cast<float>(_startDate.daysTo(coords[i].first)),
+            coords[i].second);
     }
 
     update();
 }
 
-void DiagramList::setList(std::vector< std::pair<float, float> > coords)
+void DiagramList::setList(std::vector< std::pair<float, float> > const& coords)
 {
+    if (coords.empty())
+        return;
+
     this->_startDate = QDateTime();
     std::size_t nCoords = coords.size();
     for (std::size_t i = 0; i < nCoords; i++)
@@ -332,10 +353,4 @@ void DiagramList::update()
     _maxY = calcMaxYValue();
 }
 
-QDateTime DiagramList::getDateTime(QString stringDate)
-{
-    if (stringDate.length() <= 10)
-        return QDateTime::fromString(stringDate, "dd.MM.yyyy");
 
-    return QDateTime::fromString(stringDate, "dd.MM.yyyy.HH.mm.ss");
-}
diff --git a/Applications/DataExplorer/DataView/DiagramView/DiagramList.h b/Applications/DataExplorer/DataView/DiagramView/DiagramList.h
index f90ff3642daf71f3297ec790dabee6645fc6b7b9..36f45a45fc9be745c8584fafe4c6aae7821fbd3c 100644
--- a/Applications/DataExplorer/DataView/DiagramView/DiagramList.h
+++ b/Applications/DataExplorer/DataView/DiagramView/DiagramList.h
@@ -107,6 +107,10 @@ public:
 
     /// Adds a point at (x,y) to the list
     void addNextPoint(float x, float y) { _coords.emplace_back(x, y); }
+
+    /// cut list entries not within the given range
+    void truncateToRange(QDateTime const& start, QDateTime const& end);
+
     /// Sets the start date (i.e. the min-value of the x-axis).
     void setStartDate(QDateTime date) { _startDate = date; }
 
@@ -120,7 +124,7 @@ public:
      * Sets the list of x/y-coordinates.
      * \param coords List of coordinates.
      */
-    void setList(std::vector< std::pair<float, float> > coords);
+    void setList(std::vector< std::pair<float, float> > const& coords);
 
     /**
      * Sets the list of x/y-coordinates.
@@ -128,7 +132,7 @@ public:
      * days from the first date (which is set as day 0)
      * \param coords List of coordinates.
      */
-    void setList(std::vector< std::pair<QDateTime, float> > coords);
+    void setList(std::vector< std::pair<QDateTime, float> > const& coords);
 
     /// Specifies the unit of the x Axis.
     void setXUnit(QString unit) { _xUnit = unit; }
@@ -155,8 +159,6 @@ private:
     /// Returns the maximum y-value of all the data points.
     float calcMaxYValue();
 
-    static QDateTime getDateTime(QString s);
-
     /**
      * Reads an ASCII file containing the coordinates in the following format:
      *        date (tab) value
diff --git a/Applications/DataExplorer/DataView/DiagramView/DiagramPrefs.ui b/Applications/DataExplorer/DataView/DiagramView/DiagramPrefs.ui
index 19ca90608a4368f247d84c664c690bc2bdb182e0..2d83be760f9afa43bcf90b70decec864df20e402 100644
--- a/Applications/DataExplorer/DataView/DiagramView/DiagramPrefs.ui
+++ b/Applications/DataExplorer/DataView/DiagramView/DiagramPrefs.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>267</width>
-    <height>236</height>
+    <width>317</width>
+    <height>244</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -45,7 +45,16 @@
    </item>
    <item>
     <layout class="QGridLayout" name="DateBoundsLayout">
-     <property name="margin">
+     <property name="leftMargin">
+      <number>10</number>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <property name="rightMargin">
+      <number>10</number>
+     </property>
+     <property name="bottomMargin">
       <number>10</number>
      </property>
      <property name="spacing">
diff --git a/Applications/DataExplorer/DataView/DiagramView/DiagramPrefsDialog.cpp b/Applications/DataExplorer/DataView/DiagramView/DiagramPrefsDialog.cpp
index 137fc350bc362e77581e9b2eded3fc83f0b0bb55..fa90b934052cad26ade2135afd93dcc814022e46 100644
--- a/Applications/DataExplorer/DataView/DiagramView/DiagramPrefsDialog.cpp
+++ b/Applications/DataExplorer/DataView/DiagramView/DiagramPrefsDialog.cpp
@@ -12,9 +12,10 @@
  *
  */
 
+#include "DiagramPrefsDialog.h"
 #include "DetailWindow.h"
 #include "DiagramList.h"
-#include "DiagramPrefsDialog.h"
+#include "GetDateTime.h"
 #include "OGSError.h"
 #include "Station.h"
 
@@ -67,47 +68,51 @@ DiagramPrefsDialog::~DiagramPrefsDialog()
 
 void DiagramPrefsDialog::accept()
 {
-    if ((fromDateLine->text().length() > 0) && (toDateLine->text().length() > 0) &&
-        (!_list.empty()))
+    QDateTime start_date(getDateTime(fromDateLine->text()));
+    QDateTime end_date(getDateTime(toDateLine->text()));
+
+    if (start_date == QDateTime() || end_date == QDateTime() ||
+        start_date > end_date || _list.empty())
     {
-        // data has been loaded
-        if (_list[0]->size() > 0)
-        {
-            bool window_is_empty(false);
-            if (_window == nullptr)
-            {
-                _window = new DetailWindow();
-                _window->setAttribute(Qt::WA_DeleteOnClose);
-                window_is_empty = true;
-            }
-
-            for (std::size_t i = 0; i < _list.size(); i++)
-                if (this->_visability[i]->isChecked())
-                {
-                    _window->addList(_list[i]);
-                    window_is_empty = false;
-                }
-
-            if (!window_is_empty)
-            {
-                _window->show();
-                this->done(QDialog::Accepted);
-            }
-            else
-            {
-                delete _window;
-                _window = nullptr;
-                OGSError::box("No dataset selected.");
-            }
-        }
-        else
+        OGSError::box("No data found...");
+        return;
+    }
+
+    if (_list[0]->size() == 0)
+    {
+        OGSError::box("Invalid station data.");
+        this->done(QDialog::Rejected);
+    }
+
+    // Data has been loaded.
+    // If loading lists beyond the first one fails at least nothing terrible will happen.
+    bool window_is_empty(false);
+    if (_window == nullptr)
+    {
+        _window = new DetailWindow();
+        _window->setAttribute(Qt::WA_DeleteOnClose);
+        window_is_empty = true;
+    }
+
+    for (std::size_t i = 0; i < _list.size(); i++)
+        if (_visability[i]->isChecked())
         {
-            OGSError::box("Invalid station data.");
-            this->done(QDialog::Rejected);
+            _list[i]->truncateToRange(start_date, end_date);
+            _window->addList(_list[i]);
+            window_is_empty = false;
         }
+
+    if (!window_is_empty)
+    {
+        _window->show();
+        this->done(QDialog::Accepted);
     }
     else
-        OGSError::box("No data found...");
+    {
+        delete _window;
+        _window = nullptr;
+        OGSError::box("No dataset selected.");
+    }
 }
 
 void DiagramPrefsDialog::reject()
@@ -139,10 +144,9 @@ int DiagramPrefsDialog::loadFile(const QString &filename)
             // item->setYUnit("metres");
             item->setColor(QColor(Qt::red));
         }
-        fromDateLine->setText(_list[0]->getStartDate().toString("dd.MM.yyyy")); //QString::number(_list[0]->minXValue()));
-        QDateTime endDate =
-                _list[0]->getStartDate().addSecs(static_cast<int>(_list[0]->maxXValue()));
-        toDateLine->setText(endDate.toString("dd.MM.yyyy")); //QString::number(_list[0]->maxXValue()));
+        fromDateLine->setText(_list[0]->getStartDate().toString("dd.MM.yyyy"));
+        QDateTime endDate = _list[0]->getStartDate().addSecs(static_cast<int>(_list[0]->maxXValue()));
+        toDateLine->setText(endDate.toString("dd.MM.yyyy"));
         this->createVisibilityCheckboxes();
         return 1;
     }
diff --git a/Applications/DataExplorer/DataView/DiagramView/DiagramScene.cpp b/Applications/DataExplorer/DataView/DiagramView/DiagramScene.cpp
index 544621fb6d39405b34c603c28a3ac3d840ebad0e..0c02905aabbc7ef2780bb68719042172a8d9a33f 100644
--- a/Applications/DataExplorer/DataView/DiagramView/DiagramScene.cpp
+++ b/Applications/DataExplorer/DataView/DiagramView/DiagramScene.cpp
@@ -68,7 +68,7 @@ DiagramScene::~DiagramScene()
 }
 
 /// Adds an arrow object to the diagram which might be used as a coordinate axis, etc.
-QArrow* DiagramScene::addArrow(float length, float angle, QPen &pen)
+QArrow* DiagramScene::addArrow(qreal length, qreal angle, QPen &pen)
 {
     auto* arrow = new QArrow(length, angle, 8, 5, pen);
     addItem(arrow);
@@ -130,7 +130,7 @@ QNonScalableGraphicsTextItem* DiagramScene::addNonScalableText(const QString &te
 }
 
 /// Resizes a given axis to "nice" dimensions and calculates an adequate number of ticks to be placed on it
-void DiagramScene::adjustAxis(float &min, float &max, int &numberOfTicks)
+void DiagramScene::adjustAxis(qreal& min, qreal& max, int& numberOfTicks)
 {
     const int MinTicks = 4;
     double grossStep = (max - min) / MinTicks;
@@ -151,8 +151,8 @@ void DiagramScene::adjustScaling()
 {
     if ( (_unscaledBounds.width() > 0) && (_unscaledBounds.height() > 0))
     {
-        _scaleX = DEFAULTX / (_unscaledBounds.width());
-        _scaleY = DEFAULTY / (_unscaledBounds.height());
+        _scaleX = DEFAULTX / static_cast<float>(_unscaledBounds.width());
+        _scaleY = DEFAULTY / static_cast<float>(_unscaledBounds.height());
     }
 }
 
@@ -184,10 +184,10 @@ void DiagramScene::constructGrid()
 {
     // be very careful with scaling parameters here!
     int numXTicks, numYTicks;
-    float xMin = _unscaledBounds.left();
-    float yMin = _unscaledBounds.top();
-    float xMax = _unscaledBounds.right();
-    float yMax = _unscaledBounds.bottom();
+    qreal xMin = _unscaledBounds.left();
+    qreal yMin = _unscaledBounds.top();
+    qreal xMax = _unscaledBounds.right();
+    qreal yMax = _unscaledBounds.bottom();
 
     adjustAxis(xMin, xMax, numXTicks);
     adjustAxis(yMin, yMax, numYTicks);
@@ -229,9 +229,9 @@ void DiagramScene::constructGrid()
 
     for (int j = 0; j <= numYTicks; ++j)
     {
-        float y     = _bounds.bottom() / _scaleY -
+        qreal y     = _bounds.bottom() / _scaleY -
                       (j * (_bounds.height() / _scaleY) / numYTicks);
-        float label = _bounds.top()   / _scaleY +
+        qreal label = _bounds.top()   / _scaleY +
                       (j * (_bounds.height() / _scaleY) / numYTicks);
         _yTicksText.push_back(addNonScalableText(QString::number(label)));
         _yTicksText.last()->setPos(_bounds.left() - MARGIN / 2, y * _scaleY);
@@ -284,7 +284,7 @@ int DiagramScene::getYAxisOffset()
 /// calculates axes-lengths, offsets, etc.
 void DiagramScene::initialize()
 {
-    QPen pen(Qt::black, 2, Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin);
+    QPen pen(Qt::black, 1, Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin);
     pen.setCosmetic(true);
 
     setXAxis(addArrow(_bounds.width(),  0, pen));
diff --git a/Applications/DataExplorer/DataView/DiagramView/DiagramScene.h b/Applications/DataExplorer/DataView/DiagramView/DiagramScene.h
index 889b0a2d5f9e4493bb8cdbca51b6c828cce713c6..3eef400d7ca8941d1dbe3c676df2d3977a1ba424 100644
--- a/Applications/DataExplorer/DataView/DiagramView/DiagramScene.h
+++ b/Applications/DataExplorer/DataView/DiagramView/DiagramScene.h
@@ -32,7 +32,7 @@ public:
     DiagramScene(DiagramList* list, QObject* parent = nullptr);
     ~DiagramScene() override;
 
-    QArrow* addArrow(float length, float angle, QPen &pen);
+    QArrow* addArrow(qreal length, qreal angle, QPen &pen);
     void addGraph(DiagramList* list);
     QGraphicsGrid* addGrid(const QRectF &rect, int xTicks, int yTicks, const QPen &pen);
 
@@ -42,7 +42,7 @@ private:
     void addCaption(const QString &name, QPen &pen);
     QNonScalableGraphicsTextItem* addNonScalableText(const QString &text,
                                                      const QFont &font = QFont());
-    void adjustAxis(float &min, float &max, int &numberOfTicks);
+    void adjustAxis(qreal& min, qreal& max, int& numberOfTicks);
     void adjustScaling();
     void clearGrid();
     void constructGrid();
diff --git a/Applications/DataExplorer/DataView/DiagramView/GetDateTime.h b/Applications/DataExplorer/DataView/DiagramView/GetDateTime.h
new file mode 100644
index 0000000000000000000000000000000000000000..63e50ea0770eb13abd98d630e976087b79ff7297
--- /dev/null
+++ b/Applications/DataExplorer/DataView/DiagramView/GetDateTime.h
@@ -0,0 +1,31 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#include <QDateTime>
+#include <QString>
+#include <string>
+
+/// Converts string into QDateTime-format
+inline QDateTime getDateTime(QString const& stringDate)
+{
+    if (stringDate.length() == 10)
+        return QDateTime::fromString(stringDate, "dd.MM.yyyy");
+
+    if (stringDate.length() == 19)
+        return QDateTime::fromString(stringDate, "dd.MM.yyyy.HH.mm.ss");
+
+    return QDateTime();
+}
+
+/// Converts string into QDateTime-format
+inline QDateTime getDateTime(std::string const& stringDate)
+{
+    return getDateTime(QString::fromStdString(stringDate));
+}
diff --git a/Applications/DataExplorer/DataView/DiagramView/QArrow.cpp b/Applications/DataExplorer/DataView/DiagramView/QArrow.cpp
index a2fe1ef03213b46d1b89fde3f89cf0332b6faf7e..e54f20f7a0d3347daba65c8ab47aff5a6dac0034 100644
--- a/Applications/DataExplorer/DataView/DiagramView/QArrow.cpp
+++ b/Applications/DataExplorer/DataView/DiagramView/QArrow.cpp
@@ -25,7 +25,7 @@
  * \param pen The pen for drawing the arrow
  * \param parent The parent QGraphicsItem.
  */
-QArrow::QArrow(float l, float a, float hl, float hw, QPen &pen,
+QArrow::QArrow(qreal l, qreal a, qreal hl, qreal hw, QPen& pen,
                QGraphicsItem* parent) : QGraphicsItem(parent)
 {
     _arrowLength = l;
@@ -42,7 +42,8 @@ QArrow::QArrow(float l, float a, float hl, float hw, QPen &pen,
  * \param pen The pen for drawing the arrow
  * \param parent The parent QGraphicsItem.
  */
-QArrow::QArrow(float l, float a, QPen &pen, QGraphicsItem* parent) : QGraphicsItem(parent)
+QArrow::QArrow(qreal l, qreal a, QPen& pen, QGraphicsItem* parent)
+    : QGraphicsItem(parent)
 {
     _arrowLength = l;
     _arrowAngle  = a;
@@ -116,13 +117,13 @@ void QArrow::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QW
 }
 
 /// Changes orientation of the arrow.
-void QArrow::setAngle(double a)
+void QArrow::setAngle(qreal a)
 {
     _arrowAngle = a;
 }
 
 /// Changes the length of the arrow.
-void QArrow::setLength(double l)
+void QArrow::setLength(qreal l)
 {
     _arrowLength = l;
 }
diff --git a/Applications/DataExplorer/DataView/DiagramView/QArrow.h b/Applications/DataExplorer/DataView/DiagramView/QArrow.h
index f87f4c447340bbf50dc1c6cacdb4dfbaceeeeadc..208fd333cd50ffe69baf3b217cea53577cb9e345 100644
--- a/Applications/DataExplorer/DataView/DiagramView/QArrow.h
+++ b/Applications/DataExplorer/DataView/DiagramView/QArrow.h
@@ -25,9 +25,9 @@ const double PI = 3.14159265;
 class QArrow : public QGraphicsItem
 {
 public:
-    QArrow(float l, float a, float hl, float hw, QPen& pen,
+    QArrow(qreal l, qreal a, qreal hl, qreal hw, QPen& pen,
            QGraphicsItem* parent = nullptr);
-    QArrow(float l, float a, QPen& pen, QGraphicsItem* parent = nullptr);
+    QArrow(qreal l, qreal a, QPen& pen, QGraphicsItem* parent = nullptr);
     ~QArrow() override;
 
     double getLength();
@@ -35,16 +35,16 @@ public:
     void paint(QPainter* painter, const QStyleOptionGraphicsItem* option,
                QWidget* widget) override;
     QRectF boundingRect() const override;
-    void setAngle(double a);
-    void setLength(double l);
+    void setAngle(qreal a);
+    void setLength(qreal l);
 
 private:
     double calcCos(double angle);
     double calcSin(double angle);
 
-    float _arrowLength;
-    float _arrowAngle;
-    float _headLength;
-    float _headWidth;
+    qreal _arrowLength;
+    qreal _arrowAngle;
+    qreal _headLength;
+    qreal _headWidth;
     QPen _arrowPen;
 };