[qmapshack] 01/05: Imported Upstream version 0.10.0

Bas Couwenberg sebastic at xs4all.nl
Sun Jan 11 11:23:43 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic-guest pushed a commit to branch master
in repository qmapshack.

commit 54240e257e372007bda4c5e1b64eccbb673e2d16
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Sun Jan 11 11:32:08 2015 +0100

    Imported Upstream version 0.10.0
---
 3rdparty/CGetOpt/CMakeLists.txt                    |   7 +-
 CMakeLists.txt                                     |   5 +-
 CMakeLists.txt.user                                |   2 +-
 changelog.txt                                      |   9 +
 src/CMakeLists.txt                                 |  27 +-
 src/GeoMath.h                                      |   1 +
 src/canvas/CCanvas.cpp                             |   8 +-
 src/canvas/IDrawContext.cpp                        |   2 +-
 src/canvas/IDrawContext.h                          |   2 +-
 src/dem/CDemPropSetup.cpp                          |  44 +-
 src/dem/CDemPropSetup.h                            |   1 +
 src/dem/CDemVRT.cpp                                |  31 +-
 src/dem/IDem.cpp                                   |  71 +++
 src/dem/IDem.h                                     |  25 +-
 src/dem/IDemPropSetup.ui                           | 193 ++++++++-
 src/gis/CGisDraw.cpp                               |   7 +-
 src/gis/CGisWidget.cpp                             |  16 +-
 src/gis/CGisWidget.h                               |   2 +-
 src/gis/IGisItem.cpp                               |  32 +-
 src/gis/IGisItem.h                                 |   9 +-
 src/gis/db/CDBFolderDatabase.cpp                   |   6 +-
 src/gis/db/CDBProject.cpp                          |  18 +-
 src/gis/db/CDBProject.h                            |   4 +-
 src/gis/db/CLostFoundProject.h                     |   2 +-
 src/gis/gpx/CGpxProject.cpp                        |  39 +-
 src/gis/gpx/CGpxProject.h                          |   6 +-
 src/gis/ovl/CGisItemOvlArea.cpp                    |   6 +-
 src/gis/ovl/CGisItemOvlArea.h                      |   4 +-
 src/gis/prj/IGisProject.cpp                        |  16 +-
 src/gis/prj/IGisProject.h                          |   8 +-
 src/gis/qms/CQmsProject.cpp                        |  35 +-
 src/gis/qms/CQmsProject.h                          |   6 +-
 src/gis/rte/CGisItemRte.cpp                        |  12 +-
 src/gis/rte/CGisItemRte.h                          |   4 +-
 src/gis/search/CSearchGoogle.h                     |   4 +-
 src/gis/trk/CDetailsTrk.cpp                        |  52 +++
 src/gis/trk/CGisItemTrk.cpp                        |  49 ++-
 src/gis/trk/CGisItemTrk.h                          |  27 +-
 src/gis/trk/IDetailsTrk.ui                         |  46 +-
 .../CQmsProject.h => trk/filter/CFilterDelete.cpp} |  31 +-
 .../filter/CFilterDelete.h}                        |  26 +-
 .../trk/filter/CFilterDouglasPeuker.cpp}           |  36 +-
 .../filter/CFilterDouglasPeuker.h}                 |  27 +-
 .../trk/filter/CFilterMedian.cpp}                  |  35 +-
 .../CQmsProject.h => trk/filter/CFilterMedian.h}   |  26 +-
 .../trk/filter/CFilterNewDate.cpp}                 |  29 +-
 .../filter/CFilterNewDate.h}                       |  26 +-
 .../trk/filter/CFilterObscureDate.cpp}             |  33 +-
 .../filter/CFilterObscureDate.h}                   |  26 +-
 .../trk/filter/CFilterOffsetElevation.cpp}         |  37 +-
 .../filter/CFilterOffsetElevation.h}               |  25 +-
 .../trk/filter/CFilterReplaceElevation.cpp}        |  29 +-
 .../filter/CFilterReplaceElevation.h}              |  26 +-
 .../trk/filter/CFilterSpeed.cpp}                   |  36 +-
 .../CQmsProject.h => trk/filter/CFilterSpeed.h}    |  26 +-
 src/gis/trk/filter/IFilterDelete.ui                |  99 +++++
 src/gis/trk/filter/IFilterDouglasPeuker.ui         | 128 ++++++
 src/gis/trk/filter/IFilterMedian.ui                | 134 ++++++
 src/gis/trk/filter/IFilterNewDate.ui               | 110 +++++
 src/gis/trk/filter/IFilterObscureDate.ui           | 117 +++++
 src/gis/trk/filter/IFilterOffsetElevation.ui       | 144 +++++++
 src/gis/trk/filter/IFilterReplaceElevation.ui      |  99 +++++
 src/gis/trk/filter/IFilterSpeed.ui                 | 122 ++++++
 src/gis/trk/filter/filter.cpp                      | 331 ++++++++++++++
 src/gis/wpt/CGisItemWpt.cpp                        |   6 +-
 src/gis/wpt/CGisItemWpt.h                          |   4 +-
 src/helpers/CHistoryListWidget.cpp                 |   2 +
 src/icons/32x32/Apply.png                          | Bin 0 -> 1930 bytes
 src/icons/32x32/Time.png                           | Bin 0 -> 1293 bytes
 src/icons/48x48/Apply.png                          | Bin 0 -> 3238 bytes
 src/icons/48x48/Time.png                           | Bin 0 -> 1992 bytes
 src/icons/Apply.svg                                |  68 +++
 src/icons/Time.svg                                 | 137 ++++++
 src/locale/qmapshack_cs.ts                         | 474 +++++++++++++++++----
 src/locale/qmapshack_de.ts                         | 474 +++++++++++++++++----
 src/locale/qmapshack_es.ts                         | 474 +++++++++++++++++----
 src/map/CMapIMG.cpp                                |   2 +-
 src/map/IMapPropSetup.ui                           |  12 +
 src/mouse/CScrOptRangeTrk.cpp                      |   4 +
 src/plot/CPlotSpeed.cpp                            |   2 +
 src/resources.qrc                                  |   4 +
 81 files changed, 3681 insertions(+), 578 deletions(-)

diff --git a/3rdparty/CGetOpt/CMakeLists.txt b/3rdparty/CGetOpt/CMakeLists.txt
index 4910aca..a8d77b0 100644
--- a/3rdparty/CGetOpt/CMakeLists.txt
+++ b/3rdparty/CGetOpt/CMakeLists.txt
@@ -22,10 +22,9 @@ set(RCS
 )
 
 
-
-  qt5_wrap_cpp(MOC_SRCS ${HDRS})
-  qt5_wrap_ui(UI_HDRS ${UIS})
-  qt5_add_resources(RC_SRCS ${RCS})
+qt5_wrap_cpp(MOC_SRCS ${HDRS})
+qt5_wrap_ui(UI_HDRS ${UIS})
+qt5_add_resources(RC_SRCS ${RCS})
 
 include_directories(
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index df19f90..12363c0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,5 @@
 cmake_minimum_required(VERSION 2.8.11)
+cmake_policy(SET CMP0043 NEW)
 
 project(QMapShack)
 
@@ -20,8 +21,8 @@ endif(WIN32)
 set(APPLICATION_NAME qmapshack)
 
 set(APPLICATION_VERSION_MAJOR "0")
-set(APPLICATION_VERSION_MINOR "9")
-set(APPLICATION_VERSION_PATCH "1")
+set(APPLICATION_VERSION_MINOR "10")
+set(APPLICATION_VERSION_PATCH "0")
 
 add_definitions(-DVER_MAJOR=${APPLICATION_VERSION_MAJOR} -DVER_MINOR=${APPLICATION_VERSION_MINOR} -DVER_STEP=${APPLICATION_VERSION_PATCH} -DAPPLICATION_NAME=${PROJECT_NAME})
 
diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user
index 7d75880..f58bb18 100644
--- a/CMakeLists.txt.user
+++ b/CMakeLists.txt.user
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 3.3.0, 2014-12-30T11:15:51. -->
+<!-- Written by QtCreator 3.3.0, 2015-01-07T18:30:15. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
diff --git a/changelog.txt b/changelog.txt
index 457cd3c..27e0113 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,12 @@
+V 0.10.0
+* Fix crash when saving a DB project before the database tree has been opened
+* Add track filters to hide trackpoints
+* Add track filters to change elevation
+* Add track filters to change timestamp
+* Add DEM layer to colorize the slope
+* Fix issue with duplicate key when reversing a track
+* Add project selection for all track operations
+
 V 0.9.1
 * Complete function of 'Lost & Found' folder
 * Add copy function to all items including dialog to select copy action.
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 474a9d4..fc5e197 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -125,6 +125,15 @@ set( SRCS
     gis/trk/CScrOptTrk.cpp
     gis/trk/CDetailsTrk.cpp
     gis/trk/CCombineTrk.cpp
+    gis/trk/filter/filter.cpp
+    gis/trk/filter/CFilterDouglasPeuker.cpp
+    gis/trk/filter/CFilterDelete.cpp
+    gis/trk/filter/CFilterMedian.cpp
+    gis/trk/filter/CFilterReplaceElevation.cpp
+    gis/trk/filter/CFilterOffsetElevation.cpp
+    gis/trk/filter/CFilterNewDate.cpp
+    gis/trk/filter/CFilterObscureDate.cpp
+    gis/trk/filter/CFilterSpeed.cpp
     gis/rte/CGisItemRte.cpp
     gis/rte/CScrOptRte.cpp
     gis/ovl/CGisItemOvlArea.cpp
@@ -264,6 +273,14 @@ set( HDRS
     gis/trk/CScrOptTrk.h
     gis/trk/CDetailsTrk.h
     gis/trk/CCombineTrk.h
+    gis/trk/filter/CFilterDouglasPeuker.h
+    gis/trk/filter/CFilterDelete.h
+    gis/trk/filter/CFilterMedian.h
+    gis/trk/filter/CFilterReplaceElevation.h
+    gis/trk/filter/CFilterOffsetElevation.h
+    gis/trk/filter/CFilterNewDate.h
+    gis/trk/filter/CFilterObscureDate.h
+    gis/trk/filter/CFilterSpeed.h
     gis/rte/CGisItemRte.h
     gis/rte/CScrOptRte.h
     gis/ovl/CGisItemOvlArea.h
@@ -328,6 +345,14 @@ set( UIS
     gis/trk/IScrOptTrk.ui
     gis/trk/IDetailsTrk.ui
     gis/trk/ICombineTrk.ui
+    gis/trk/filter/IFilterDouglasPeuker.ui
+    gis/trk/filter/IFilterDelete.ui
+    gis/trk/filter/IFilterMedian.ui
+    gis/trk/filter/IFilterReplaceElevation.ui
+    gis/trk/filter/IFilterOffsetElevation.ui
+    gis/trk/filter/IFilterNewDate.ui
+    gis/trk/filter/IFilterObscureDate.ui
+    gis/trk/filter/IFilterSpeed.ui
     gis/rte/IScrOptRte.ui
     gis/ovl/IScrOptOvlArea.ui
     gis/ovl/IDetailsOvlArea.ui
@@ -345,7 +370,7 @@ qt5_wrap_ui(UI_HDRS ${UIS})
 qt5_add_resources(RC_SRCS ${RCS})
 
 if(UNIX)
-    add_definitions(-Wall -Wno-switch)
+    add_definitions(-Wall -Wno-switch -Wno-strict-aliasing)
 endif(UNIX)
 
 
diff --git a/src/GeoMath.h b/src/GeoMath.h
index 5ad19a4..a6a66f3 100644
--- a/src/GeoMath.h
+++ b/src/GeoMath.h
@@ -30,6 +30,7 @@ class IDrawContext;
 
 struct point3D
 {
+    point3D() : x(0), y(0), z(0){}
     qreal x;
     qreal y;
     qreal z;
diff --git a/src/canvas/CCanvas.cpp b/src/canvas/CCanvas.cpp
index 35a0a01..218f600 100644
--- a/src/canvas/CCanvas.cpp
+++ b/src/canvas/CCanvas.cpp
@@ -293,8 +293,6 @@ void CCanvas::paintEvent(QPaintEvent * e)
         return;
     }
 
-    const QRectF& r = e->rect();
-
     QPainter p;
     p.begin(this);
     USE_ANTI_ALIASING(p,true);
@@ -306,9 +304,9 @@ void CCanvas::paintEvent(QPaintEvent * e)
     // move coordinate system to center of the screen
     p.translate(width() >> 1, height() >> 1);
 
-    map->draw(p, needsRedraw, posFocus, r);
-    dem->draw(p, needsRedraw, posFocus, r);
-    gis->draw(p, needsRedraw, posFocus, r);   
+    map->draw(p, needsRedraw, posFocus);
+    dem->draw(p, needsRedraw, posFocus);
+    gis->draw(p, needsRedraw, posFocus);
 
     // restore coordinate system to default
     p.resetTransform();
diff --git a/src/canvas/IDrawContext.cpp b/src/canvas/IDrawContext.cpp
index 8b4c00e..f9423d1 100644
--- a/src/canvas/IDrawContext.cpp
+++ b/src/canvas/IDrawContext.cpp
@@ -342,7 +342,7 @@ void IDrawContext::convertRad2Px(QPolygonF& poly)
     mutex.unlock(); // --------- stop serialize with thread
 }
 
-void IDrawContext::draw(QPainter& p, CCanvas::redraw_e needsRedraw, const QPointF& f, const QRectF &r)
+void IDrawContext::draw(QPainter& p, CCanvas::redraw_e needsRedraw, const QPointF& f)
 {
     if(pjsrc == 0) return;
 
diff --git a/src/canvas/IDrawContext.h b/src/canvas/IDrawContext.h
index 260b2ae..2939ff6 100644
--- a/src/canvas/IDrawContext.h
+++ b/src/canvas/IDrawContext.h
@@ -113,7 +113,7 @@ class IDrawContext : public QThread
             @param needsRedraw  set true to trigger a redraw in the background thread
             @param f            the point of focus in [°] that is drawn in the middle of the viewport.
          */
-        void draw(QPainter& p, CCanvas::redraw_e needsRedraw, const QPointF &f, const QRectF &r);
+        void draw(QPainter& p, CCanvas::redraw_e needsRedraw, const QPointF &f);
 
         /**
            @brief Get the projection string of this map object
diff --git a/src/dem/CDemPropSetup.cpp b/src/dem/CDemPropSetup.cpp
index 2cdd8d1..a55a25f 100644
--- a/src/dem/CDemPropSetup.cpp
+++ b/src/dem/CDemPropSetup.cpp
@@ -36,12 +36,31 @@ CDemPropSetup::CDemPropSetup(IDem * demfile, CDemDraw *dem)
     connect(dem, SIGNAL(sigScaleChanged(QPointF)), this, SLOT(slotScaleChanged(QPointF)));
     connect(toolSetMinScale, SIGNAL(toggled(bool)), this, SLOT(slotSetMinScale(bool)));
     connect(toolSetMaxScale, SIGNAL(toggled(bool)), this, SLOT(slotSetMaxScale(bool)));
+
     connect(checkHillshading, SIGNAL(toggled(bool)), demfile, SLOT(slotSetHillshading(bool)));
     connect(checkHillshading, SIGNAL(clicked()), dem, SLOT(emitSigCanvasUpdate()));
-
     connect(sliderHillshading, SIGNAL(valueChanged(int)), demfile, SLOT(slotSetFactorHillshade(int)));
     connect(sliderHillshading, SIGNAL(valueChanged(int)), dem, SLOT(emitSigCanvasUpdate()));
 
+    connect(checkSlopeColor, SIGNAL(toggled(bool)), demfile, SLOT(slotSetSlopeColor(bool)));
+    connect(checkSlopeColor, SIGNAL(clicked()), dem, SLOT(emitSigCanvasUpdate()));
+    connect(sliderSlopeColor, SIGNAL(valueChanged(int)), demfile, SLOT(slotSetGradeSlopeColor(int)));
+    connect(sliderSlopeColor, SIGNAL(valueChanged(int)), dem, SLOT(emitSigCanvasUpdate()));
+    connect(sliderSlopeColor, SIGNAL(valueChanged(int)), this, SLOT(slotSetGradeSlopeColor(int)));
+
+    const QVector<QRgb>& colortable = demfile->getSlopeColorTable();
+    QPixmap pixmap(20,10);
+    pixmap.fill(colortable[5]);
+    labelColor5->setPixmap(pixmap);
+    pixmap.fill(colortable[4]);
+    labelColor4->setPixmap(pixmap);
+    pixmap.fill(colortable[3]);
+    labelColor3->setPixmap(pixmap);
+    pixmap.fill(colortable[2]);
+    labelColor2->setPixmap(pixmap);
+    pixmap.fill(colortable[1]);
+    labelColor1->setPixmap(pixmap);
+
 }
 
 CDemPropSetup::~CDemPropSetup()
@@ -62,6 +81,8 @@ void CDemPropSetup::slotPropertiesChanged()
     toolSetMinScale->blockSignals(true);
     checkHillshading->blockSignals(true);
     sliderHillshading->blockSignals(true);
+    checkSlopeColor->blockSignals(true);
+    sliderSlopeColor->blockSignals(true);
 
     sliderOpacity->setValue(demfile->getOpacity());
     qreal minScale = demfile->getMinScale();
@@ -73,12 +94,19 @@ void CDemPropSetup::slotPropertiesChanged()
 
     checkHillshading->setChecked(demfile->doHillshading());
     sliderHillshading->setValue(demfile->getFactorHillshading());
+    checkSlopeColor->setChecked(demfile->doSlopeColor());
+    sliderSlopeColor->setValue(demfile->getGradeSlopeColor());
+
+    slotSetGradeSlopeColor(sliderSlopeColor->value());
 
     sliderOpacity->blockSignals(false);
     toolSetMaxScale->blockSignals(false);
     toolSetMinScale->blockSignals(false);
     checkHillshading->blockSignals(false);
     sliderHillshading->blockSignals(false);
+    checkSlopeColor->blockSignals(false);
+    sliderSlopeColor->blockSignals(false);
+
 }
 
 void CDemPropSetup::slotScaleChanged(const QPointF& s)
@@ -153,3 +181,17 @@ void CDemPropSetup::updateScaleLabel()
 
     labelScale->setPixmap(pix);
 }
+
+void CDemPropSetup::slotSetGradeSlopeColor(int val)
+{
+    labelGrade->setText(tr("<b>Grade %1</b>").arg(val));
+
+    const qreal * g = IDem::tblGrade[val];
+
+    labelValue1->setText(QString("> %1%2").arg(g[1]).arg(QChar(0260)));
+    labelValue2->setText(QString("> %1%2").arg(g[2]).arg(QChar(0260)));
+    labelValue3->setText(QString("> %1%2").arg(g[3]).arg(QChar(0260)));
+    labelValue4->setText(QString("> %1%2").arg(g[4]).arg(QChar(0260)));
+    labelValue5->setText(QString("> %1%2").arg(g[5]).arg(QChar(0260)));
+
+}
diff --git a/src/dem/CDemPropSetup.h b/src/dem/CDemPropSetup.h
index 257f9d4..761d888 100644
--- a/src/dem/CDemPropSetup.h
+++ b/src/dem/CDemPropSetup.h
@@ -40,6 +40,7 @@ class CDemPropSetup : public IDemProp, private Ui::IDemPropSetup
         void slotScaleChanged(const QPointF& s);
         void slotSetMinScale(bool checked);
         void slotSetMaxScale(bool checked);
+        void slotSetGradeSlopeColor(int val);
 
     private:
         void updateScaleLabel();
diff --git a/src/dem/CDemVRT.cpp b/src/dem/CDemVRT.cpp
index 499ba19..e4dec23 100644
--- a/src/dem/CDemVRT.cpp
+++ b/src/dem/CDemVRT.cpp
@@ -108,8 +108,8 @@ CDemVRT::CDemVRT(const QString &filename, CDemDraw *parent)
     if(pj_is_latlong(pjsrc))
     {
 
-        xscale *= 111120 / 2;
-        yscale *= 111120 / 2;
+        xscale *= 111120;
+        yscale *= 111120;
         // convert to RAD to match internal notations
         trFwd = trFwd * DEG_TO_RAD;
     }
@@ -185,7 +185,7 @@ void CDemVRT::draw(IDrawContext::buffer_t& buf)
         return;
     }
 
-    if(!doHillshading())
+    if(!doHillshading() && !doSlopeColor())
     {
         QThread::msleep(100);
         return;
@@ -245,10 +245,13 @@ void CDemVRT::draw(IDrawContext::buffer_t& buf)
 
     // start to draw the map
     QPainter p(&buf.image);
-    USE_ANTI_ALIASING(p,true);
-    p.setOpacity(getOpacity()/100.0);
+    USE_ANTI_ALIASING(p,true);    
     p.translate(-pp);
 
+    qreal o1 = getOpacity()/100.0;
+    qreal o2 = ((o1 + 0.4) >= 1.0) ? o1 : (o1 + 0.4);
+    p.setOpacity(o1);
+
     qreal nTiles = ((right - left) * (bottom - top) / (w * h));
     qDebug() << "DEM> tiles:" << nTiles;
     if(!isOutOfScale(bufferScale) && (nTiles < TILELIMIT))
@@ -318,12 +321,28 @@ void CDemVRT::draw(IDrawContext::buffer_t& buf)
 
                 if(doHillshading())
                 {
+                    QPolygonF r = l;
+
                     QImage img(w_used,h_used,QImage::Format_Indexed8);
                     img.setColorTable(graytable);
 
                     hillshading(data, w_used, h_used, img);
 
-                    drawTile(img, l, p);
+                    drawTile(img, r, p);
+                }
+
+                if(doSlopeColor())
+                {
+                    QPolygonF r = l;
+
+                    QImage img(w_used,h_used,QImage::Format_Indexed8);
+                    img.setColorTable(slopetable);
+
+                    slopecolor(data, w_used, h_used, img);
+
+                    p.setOpacity(o2);
+                    drawTile(img, r, p);
+                    p.setOpacity(o1);
                 }
             }
         }
diff --git a/src/dem/IDem.cpp b/src/dem/IDem.cpp
index b72c050..389ec43 100644
--- a/src/dem/IDem.cpp
+++ b/src/dem/IDem.cpp
@@ -40,6 +40,14 @@ inline void fillWindow(QVector<qint16>& data, int x, int y, int dx, qint16 * w)
     w[8] = getValue(data, x + 1, y + 1, dx);
 }
 
+const qreal IDem::tblGrade[5][6] =
+{
+     {0,0,0,0,0,0}
+    ,{0.0,27.0,31.0,34.0,39.0,50.0}
+    ,{0.0,27.0,30.0,32.0,35.0,39.0}
+    ,{0.0,27.0,29.0,30.0,31.0,34.0}
+    ,{0.0,23.0,25.0,27.0,28.0,30.0}
+};
 
 IDem::IDem(CDemDraw *parent)
     : IDrawObject(parent)
@@ -50,6 +58,8 @@ IDem::IDem(CDemDraw *parent)
     , noData(0)
     , bHillshading(false)
     , factorHillshading(1.0)
+    , bSlopeColor(false)
+    , gradeSlopeColor(1)
 {
     slotSetOpacity(50);
     pjtar = pj_init_plus("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
@@ -61,6 +71,12 @@ IDem::IDem(CDemDraw *parent)
     }
     graytable[255] = qRgba(0,0,0,0);
 
+    slopetable << qRgba(0,0,0,0);
+    slopetable << qRgba(0,128,0,100);
+    slopetable << qRgba(0,255,0,100);
+    slopetable << qRgba(255,255,0,100);
+    slopetable << qRgba(255,128,0,100);
+    slopetable << qRgba(255,0,0,100);
 }
 
 IDem::~IDem()
@@ -75,6 +91,8 @@ void IDem::saveConfig(QSettings& cfg)
 
     cfg.setValue("doHillshading",bHillshading);
     cfg.setValue("factorHillshading", factorHillshading);
+    cfg.setValue("doSlopeColor",bSlopeColor);
+    cfg.setValue("gradeSlopeColor", gradeSlopeColor);
 }
 
 void IDem::loadConfig(QSettings& cfg)
@@ -83,6 +101,8 @@ void IDem::loadConfig(QSettings& cfg)
 
     bHillshading = cfg.value("doHillshading",bHillshading).toBool();
     factorHillshading = cfg.value("factorHillshading", factorHillshading).toFloat();
+    bSlopeColor = cfg.value("doSlopeColor", bSlopeColor).toBool();
+    gradeSlopeColor = cfg.value("gradeSlopeColor", gradeSlopeColor).toInt();
 }
 
 
@@ -112,6 +132,12 @@ void IDem::slotSetFactorHillshade(int f)
     }
 }
 
+void IDem::slotSetGradeSlopeColor(int g)
+{
+    /// @todo check range
+    gradeSlopeColor = g;
+}
+
 int IDem::getFactorHillshading()
 {
     if(factorHillshading == 1.0)
@@ -171,6 +197,51 @@ void IDem::hillshading(QVector<qint16>& data, qreal w, qreal h, QImage& img)
     }
 }
 
+void IDem::slopecolor(QVector<qint16>& data, qreal w, qreal h, QImage &img)
+{
+    int wp2 = w + 2;
+    qint16 win[9];
+    qreal dx, dy, k, slope;
+
+    for(int m = 1; m <= h; m++)
+    {
+        for(int n = 1; n <= w; n++)
+        {
+            fillWindow(data, n, m, wp2, win);
+            dx  = ((win[0] + win[3] + win[3] + win[6]) - (win[2] + win[5] + win[5] + win[8])) / (xscale);
+            dy  = ((win[6] + win[7] + win[7] + win[8]) - (win[0] + win[1] + win[1] + win[2])) / (yscale);
+            k   = (dx * dx + dy * dy);
+            slope =  atan(sqrt(k) / (8 * 1.0)) * 180.0 / M_PI;
+
+            if(slope > tblGrade[gradeSlopeColor][5])
+            {
+                img.setPixel(n - 1, m - 1, 5);
+            }
+            else if(slope > tblGrade[gradeSlopeColor][4])
+            {
+                img.setPixel(n - 1, m - 1, 4);
+            }
+            else if(slope > tblGrade[gradeSlopeColor][3])
+            {
+                img.setPixel(n - 1, m - 1, 3);
+            }
+            else if(slope > tblGrade[gradeSlopeColor][2])
+            {
+                img.setPixel(n - 1, m - 1, 2);
+            }
+            else if(slope > tblGrade[gradeSlopeColor][1])
+            {
+                img.setPixel(n - 1, m - 1, 1);
+            }
+            else
+            {
+                img.setPixel(n - 1, m - 1, 0);
+            }
+
+        }
+    }
+}
+
 
 void IDem::drawTile(QImage& img, QPolygonF& l, QPainter& p)
 {
diff --git a/src/dem/IDem.h b/src/dem/IDem.h
index b3087f4..225eea8 100644
--- a/src/dem/IDem.h
+++ b/src/dem/IDem.h
@@ -61,15 +61,30 @@ class IDem : public IDrawObject
 
         int getFactorHillshading();
 
+        bool doSlopeColor(){return bSlopeColor;}
+
+        int getGradeSlopeColor(){return gradeSlopeColor;}
+
+
+        const QVector<QRgb> getSlopeColorTable(){return slopetable;}
+
+        static const qreal tblGrade[5][6];
+
     public slots:
         void slotSetHillshading(bool yes){bHillshading = yes;}
 
         void slotSetFactorHillshade(int f);
 
+        void slotSetSlopeColor(bool yes){bSlopeColor = yes;}
+
+        void slotSetGradeSlopeColor(int g);
+
     protected:
 
         void hillshading(QVector<qint16>& data, qreal w, qreal h, QImage &img);
 
+        void slopecolor(QVector<qint16>& data, qreal w, qreal h, QImage &img);
+
         /**
            @brief Reproject (translate, rotate, scale) tile befor drwaing it.
            @param img   the tile as QImage
@@ -114,15 +129,21 @@ class IDem : public IDrawObject
 
         QVector<QRgb> graytable;
 
+        QVector<QRgb> slopetable;
+
         int hasNoData;
 
-        double noData;
+        double noData;        
 
     private:
-        bool bHillshading;
+        bool bHillshading;        
 
         qreal factorHillshading;
 
+        bool bSlopeColor;
+
+        int gradeSlopeColor;
+
 
 };
 
diff --git a/src/dem/IDemPropSetup.ui b/src/dem/IDemPropSetup.ui
index 2294a30..2bbedff 100644
--- a/src/dem/IDemPropSetup.ui
+++ b/src/dem/IDemPropSetup.ui
@@ -7,13 +7,28 @@
     <x>0</x>
     <y>0</y>
     <width>400</width>
-    <height>94</height>
+    <height>196</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>3</number>
+   </property>
+   <property name="rightMargin">
+    <number>3</number>
+   </property>
+   <property name="bottomMargin">
+    <number>3</number>
+   </property>
    <item>
     <widget class="QSlider" name="sliderOpacity">
      <property name="toolTip">
@@ -26,6 +41,9 @@
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>3</number>
+     </property>
      <item>
       <widget class="QToolButton" name="toolSetMinScale">
        <property name="toolTip">
@@ -90,15 +108,15 @@
     </layout>
    </item>
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_2">
-     <item>
+    <layout class="QGridLayout" name="gridLayout_2">
+     <item row="0" column="0">
       <widget class="QCheckBox" name="checkHillshading">
        <property name="text">
         <string>Hillshading</string>
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="1">
       <widget class="QSlider" name="sliderHillshading">
        <property name="minimum">
         <number>-8</number>
@@ -117,6 +135,173 @@
        </property>
       </widget>
      </item>
+     <item row="1" column="0">
+      <widget class="QCheckBox" name="checkSlopeColor">
+       <property name="text">
+        <string>Slope </string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QSlider" name="sliderSlopeColor">
+       <property name="minimum">
+        <number>1</number>
+       </property>
+       <property name="maximum">
+        <number>4</number>
+       </property>
+       <property name="pageStep">
+        <number>1</number>
+       </property>
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <property name="spacing">
+      <number>3</number>
+     </property>
+     <item row="2" column="0">
+      <widget class="QLabel" name="labelColor4">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>20</width>
+         <height>10</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QLabel" name="labelValue4">
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="1">
+      <widget class="QLabel" name="labelValue3">
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLabel" name="labelValue5">
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="0">
+      <widget class="QLabel" name="labelColor5">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>20</width>
+         <height>10</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="0">
+      <widget class="QLabel" name="labelColor3">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>20</width>
+         <height>10</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="2">
+      <widget class="QLabel" name="labelColor2">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>20</width>
+         <height>10</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="3">
+      <widget class="QLabel" name="labelValue2">
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="3">
+      <widget class="QLabel" name="labelValue1">
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="2">
+      <widget class="QLabel" name="labelColor1">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>20</width>
+         <height>10</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="2" colspan="2">
+      <widget class="QLabel" name="labelGrade">
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
   </layout>
diff --git a/src/gis/CGisDraw.cpp b/src/gis/CGisDraw.cpp
index 91edfd9..311dfd9 100644
--- a/src/gis/CGisDraw.cpp
+++ b/src/gis/CGisDraw.cpp
@@ -55,11 +55,16 @@ void CGisDraw::drawt(buffer_t& currentBuffer)
     QPointF pp = currentBuffer.ref1;
     convertRad2Px(pp);
 
+
     QRectF rect(QPointF(left,top), QPointF(right, bottom));
+
+    QPolygonF viewport;
+    viewport << pt1 << pt2 << pt3 << pt4;
+
     QPainter p(&currentBuffer.image);
     USE_ANTI_ALIASING(p,true);
     p.translate(-pp);
 
-    CGisWidget::self().draw(p,rect, this);
+    CGisWidget::self().draw(p,viewport, this);
 
 }
diff --git a/src/gis/CGisWidget.cpp b/src/gis/CGisWidget.cpp
index 1e20d52..0331d29 100644
--- a/src/gis/CGisWidget.cpp
+++ b/src/gis/CGisWidget.cpp
@@ -346,7 +346,11 @@ void CGisWidget::cutTrkByKey(const IGisItem::key_t& key)
     CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
     if(trk != 0 && trk->cut())
     {
-        delete trk;
+        int res = QMessageBox::question(this, tr("Cut Track..."), tr("Do you want to delete the original track?"), QMessageBox::Ok|QMessageBox::No, QMessageBox::Ok);
+        if(res == QMessageBox::Ok)
+        {
+            delete trk;
+        }
     }
 
     emit sigChanged();
@@ -429,11 +433,10 @@ void CGisWidget::editAreaByKey(const IGisItem::key_t& key)
 
 }
 
-void CGisWidget::draw(QPainter& p, const QRectF& viewport, CGisDraw * gis)
+void CGisWidget::draw(QPainter& p, const QPolygonF& viewport, CGisDraw * gis)
 {
     QFontMetricsF fm(CMainWindow::self().getMapFont());
     QList<QRectF> blockedAreas;
-    QSet<QString> seenKeys;
 
     QMutexLocker lock(&IGisItem::mutexItems);
     // draw mandatory stuff first
@@ -449,12 +452,9 @@ void CGisWidget::draw(QPainter& p, const QRectF& viewport, CGisDraw * gis)
         {
             continue;
         }
-        project->drawItem(p, viewport, blockedAreas, seenKeys, gis);
+        project->drawItem(p, viewport, blockedAreas, gis);
     }
 
-    // reset seen keys as lables will build the list a second time
-    seenKeys.clear();
-
     // draw optional labels second
     for(int i = 0; i < treeWks->topLevelItemCount(); i++)
     {
@@ -468,7 +468,7 @@ void CGisWidget::draw(QPainter& p, const QRectF& viewport, CGisDraw * gis)
         {
             continue;
         }
-        project->drawLabel(p, viewport, blockedAreas, seenKeys, fm, gis);
+        project->drawLabel(p, viewport, blockedAreas, fm, gis);
     }
 
 }
diff --git a/src/gis/CGisWidget.h b/src/gis/CGisWidget.h
index 663333a..54610e0 100644
--- a/src/gis/CGisWidget.h
+++ b/src/gis/CGisWidget.h
@@ -137,7 +137,7 @@ class CGisWidget : public QWidget, private Ui::IGisWidget
            @param viewport  the viewport in units of rad
            @param gis       the draw context to be used
         */
-        void draw(QPainter& p, const QRectF& viewport, CGisDraw *gis);
+        void draw(QPainter& p, const QPolygonF &viewport, CGisDraw *gis);
 
 
         /**
diff --git a/src/gis/IGisItem.cpp b/src/gis/IGisItem.cpp
index 743cc15..afb0bc8 100644
--- a/src/gis/IGisItem.cpp
+++ b/src/gis/IGisItem.cpp
@@ -17,6 +17,7 @@
 **********************************************************************************************/
 
 #include "gis/IGisItem.h"
+#include "gis/CGisDraw.h"
 #include "gis/CGisListWks.h"
 #include "gis/prj/IGisProject.h"
 #include "gis/trk/CGisItemTrk.h"
@@ -62,7 +63,7 @@ IGisItem::IGisItem(IGisProject *parent, type_e typ, int idx)
     : QTreeWidgetItem(parent, typ)
     , flags(0)
 {
-    int n;
+    int n = -1;
     setFlags(QTreeWidgetItem::flags() & ~Qt::ItemIsDropEnabled);
 
     if(parent == 0)
@@ -621,3 +622,32 @@ QString IGisItem::createText(bool isReadOnly, const QString& desc, const QList<l
 
     return str;
 }
+
+bool IGisItem::isVisible(const QRectF &rect, const QPolygonF& viewport, CGisDraw *gis)
+{
+    QPolygonF tmp1;
+    tmp1 << rect.topLeft();
+    tmp1 << rect.topRight();
+    tmp1 << rect.bottomRight();
+    tmp1 << rect.bottomLeft();
+
+    gis->convertRad2Px(tmp1);
+
+    QPolygonF tmp2 = viewport;
+    gis->convertRad2Px(tmp2);
+
+    return tmp2.boundingRect().intersects(tmp2.boundingRect());
+}
+
+bool IGisItem::isVisible(const QPointF& point, const QPolygonF& viewport, CGisDraw * gis)
+{
+    QPolygonF tmp2 = viewport;
+    gis->convertRad2Px(tmp2);
+
+    QPointF pt = point;
+    gis->convertRad2Px(pt);
+
+    return tmp2.boundingRect().contains(pt);
+
+}
+
diff --git a/src/gis/IGisItem.h b/src/gis/IGisItem.h
index ff21eb0..5037f4d 100644
--- a/src/gis/IGisItem.h
+++ b/src/gis/IGisItem.h
@@ -243,9 +243,9 @@ class IGisItem : public QTreeWidgetItem
          */
         virtual void setReadOnlyMode(bool readOnly);
 
-        virtual void drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis) = 0;
+        virtual void drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis) = 0;
         virtual void drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis){}
-        virtual void drawLabel(QPainter& p, const QRectF& viewport,QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis) = 0;
+        virtual void drawLabel(QPainter& p, const QPolygonF& viewport,QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis) = 0;
         virtual void drawHighlight(QPainter& p) = 0;        
 
         virtual void gainUserFocus(bool yes) = 0;
@@ -325,6 +325,11 @@ class IGisItem : public QTreeWidgetItem
 
         virtual void loadFromDb(quint64 id, QSqlDatabase& db);
 
+        bool isVisible(const QRectF& rect, const QPolygonF& viewport, CGisDraw * gis);
+        bool isVisible(const QPointF& point, const QPolygonF& viewport, CGisDraw * gis);
+
+
+
         quint32 flags;
         key_t   key;
         QString hash;
diff --git a/src/gis/db/CDBFolderDatabase.cpp b/src/gis/db/CDBFolderDatabase.cpp
index 7f155fa..ccd71eb 100644
--- a/src/gis/db/CDBFolderDatabase.cpp
+++ b/src/gis/db/CDBFolderDatabase.cpp
@@ -23,6 +23,7 @@
 CDBFolderDatabase::CDBFolderDatabase(const QString& filename, const QString& name, QTreeWidget *parent)
     : IDBFolder(false, IDB::db, eTypeDatabase, 1, parent)
     , filename(filename)
+    , folderLostFound(0)
 {
     setToolTip(CGisListDB::eColumnName, QObject::tr("All your data grouped by folders."));
     setIcon(CGisListDB::eColumnCheckbox, QIcon("://icons/32x32/Database.png"));
@@ -48,5 +49,8 @@ void CDBFolderDatabase::expanding()
 
 void CDBFolderDatabase::updateLostFound()
 {
-    folderLostFound->update();
+    if(folderLostFound)
+    {
+        folderLostFound->update();
+    }
 }
diff --git a/src/gis/db/CDBProject.cpp b/src/gis/db/CDBProject.cpp
index c1aae27..930e7df 100644
--- a/src/gis/db/CDBProject.cpp
+++ b/src/gis/db/CDBProject.cpp
@@ -116,7 +116,7 @@ void CDBProject::postStatus()
     CGisWidget::self().postEventForDb(info);
 }
 
-void CDBProject::saveAs()
+bool CDBProject::saveAs()
 {
     SETTINGS;
     QString path = cfg.value("Paths/lastGisPath", QDir::homePath()).toString();
@@ -126,27 +126,30 @@ void CDBProject::saveAs()
 
     if(fn.isEmpty())
     {
-        return;
+        return false;
     }
 
+    bool res = false;
     if(filter == "*.gpx")
     {
-        CGpxProject::saveAs(fn, *this);
+        res = CGpxProject::saveAs(fn, *this);
     }
     else if(filter == "*.qms")
     {
-        CQmsProject::saveAs(fn, *this);
+        res = CQmsProject::saveAs(fn, *this);
     }
     else
     {
-        return;
+        return false;
     }
 
     path = QFileInfo(fn).absolutePath();
     cfg.setValue("Paths/lastGisPath", path);
+
+    return res;
 }
 
-void CDBProject::save()
+bool CDBProject::save()
 {
     QSqlQuery query(db);
 
@@ -280,7 +283,10 @@ void CDBProject::save()
             info->updateLostFound = true;
             CGisWidget::self().postEventForDb(info);
         }
+
+        return false;
     }
+    return true;
 }
 
 void CDBProject::showItems(CEvtD2WShowItems * evt)
diff --git a/src/gis/db/CDBProject.h b/src/gis/db/CDBProject.h
index 79aa1c7..e575f82 100644
--- a/src/gis/db/CDBProject.h
+++ b/src/gis/db/CDBProject.h
@@ -42,8 +42,8 @@ class CDBProject : public IGisProject
         */
         void restoreDBLink();
 
-        void save();
-        void saveAs();
+        bool save();
+        bool saveAs();
 
         quint64 getId(){return id;}
         QString getDBName(){return db.connectionName();}
diff --git a/src/gis/db/CLostFoundProject.h b/src/gis/db/CLostFoundProject.h
index abd998a..ceae845 100644
--- a/src/gis/db/CLostFoundProject.h
+++ b/src/gis/db/CLostFoundProject.h
@@ -29,7 +29,7 @@ class CLostFoundProject : public CDBProject
 
         virtual ~CLostFoundProject();
 
-        void save(){}
+        bool save(){return false;}
 
         void updateFromDb();
 
diff --git a/src/gis/gpx/CGpxProject.cpp b/src/gis/gpx/CGpxProject.cpp
index 00d830b..c4d5fb4 100644
--- a/src/gis/gpx/CGpxProject.cpp
+++ b/src/gis/gpx/CGpxProject.cpp
@@ -129,20 +129,24 @@ CGpxProject::~CGpxProject()
 
 }
 
-void CGpxProject::save()
+bool CGpxProject::save()
 {
     if(filename.isEmpty())
     {
-        saveAs();
+        return saveAs();
     }
     else
     {
-        saveAs(filename, *this);
-        markAsSaved();
+        if(saveAs(filename, *this))
+        {
+            markAsSaved();
+        }
     }
+
+    return true;
 }
 
-void CGpxProject::saveAs()
+bool CGpxProject::saveAs()
 {
     SETTINGS;
     QString path = cfg.value("Paths/lastGisPath", QDir::homePath()).toString();
@@ -152,35 +156,40 @@ void CGpxProject::saveAs()
 
     if(fn.isEmpty())
     {
-        return;
+        return false;
     }
 
 
+    bool res = false;
     if(filter == "*.gpx")
     {
         filename = fn;
         metadata.name.clear();
         setupName(QFileInfo(filename).baseName().replace("_", " "));
 
-        saveAs(fn, *this);
-        markAsSaved();
+        res = saveAs(fn, *this);
+        if(res)
+        {
+            markAsSaved();
+        }
 
     }
     else if(filter == "*.qms")
     {
-        CQmsProject::saveAs(fn, *this);
+        res = CQmsProject::saveAs(fn, *this);
     }
     else
     {
-        return;
+        return false;
     }
 
     path = QFileInfo(fn).absolutePath();
     cfg.setValue("Paths/lastGisPath", path);
+    return res;
 }
 
 
-void CGpxProject::saveAs(const QString& fn, IGisProject& project)
+bool CGpxProject::saveAs(const QString& fn, IGisProject& project)
 {
     QString _fn_ = fn;
     QFileInfo fi(_fn_);
@@ -229,7 +238,7 @@ void CGpxProject::saveAs(const QString& fn, IGisProject& project)
                 ,QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
             if(res == QMessageBox::No)
             {
-                return;
+                return false;
             }
         }
 
@@ -287,7 +296,7 @@ void CGpxProject::saveAs(const QString& fn, IGisProject& project)
     if(!file.open(QIODevice::WriteOnly))
     {
         QMessageBox::warning(0, QObject::tr("Saveing GIS data failed..."), QObject::tr("Failed to create file '%1'").arg(_fn_), QMessageBox::Abort);
-        return;
+        return false;
     }
     QTextStream out(&file);
     out.setCodec("UTF-8");
@@ -297,7 +306,9 @@ void CGpxProject::saveAs(const QString& fn, IGisProject& project)
     if(file.error() != QFile::NoError)
     {
         QMessageBox::warning(0, QObject::tr("Saveing GIS data failed..."), QObject::tr("Failed to write file '%1'").arg(_fn_), QMessageBox::Abort);
-        return;
+        return false;
     }
+
+    return true;
 }
 
diff --git a/src/gis/gpx/CGpxProject.h b/src/gis/gpx/CGpxProject.h
index d012f63..46d2fff 100644
--- a/src/gis/gpx/CGpxProject.h
+++ b/src/gis/gpx/CGpxProject.h
@@ -35,10 +35,10 @@ class CGpxProject : public IGisProject
         CGpxProject(const QString &filename, CGisListWks * parent);
         virtual ~CGpxProject();
 
-        void save();
-        void saveAs();
+        bool save();
+        bool saveAs();
 
-        static void saveAs(const QString& fn, IGisProject& project);
+        static bool saveAs(const QString& fn, IGisProject& project);
 
 
     private:
diff --git a/src/gis/ovl/CGisItemOvlArea.cpp b/src/gis/ovl/CGisItemOvlArea.cpp
index 5ce8d3d..859c691 100644
--- a/src/gis/ovl/CGisItemOvlArea.cpp
+++ b/src/gis/ovl/CGisItemOvlArea.cpp
@@ -301,10 +301,10 @@ void CGisItemOvlArea::deriveSecondaryData()
     area.area = qAbs(area.area/2);
 }
 
-void CGisItemOvlArea::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis)
+void CGisItemOvlArea::drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis)
 {
     line.clear();
-    if(!viewport.intersects(boundingRect))
+    if(!isVisible(boundingRect, viewport, gis))
     {
         return;
     }
@@ -337,7 +337,7 @@ void CGisItemOvlArea::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF
     p.restore();
 }
 
-void CGisItemOvlArea::drawLabel(QPainter& p, const QRectF& viewport,QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis)
+void CGisItemOvlArea::drawLabel(QPainter& p, const QPolygonF &viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis)
 {
     if(line.isEmpty())
     {
diff --git a/src/gis/ovl/CGisItemOvlArea.h b/src/gis/ovl/CGisItemOvlArea.h
index c891d8c..c1273c9 100644
--- a/src/gis/ovl/CGisItemOvlArea.h
+++ b/src/gis/ovl/CGisItemOvlArea.h
@@ -71,8 +71,8 @@ class CGisItemOvlArea : public IGisItem, public IGisLine
         void save(QDomNode& gpx);
         void edit();
 
-        void drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
-        void drawLabel(QPainter& p, const QRectF& viewport,QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
+        void drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
+        void drawLabel(QPainter& p, const QPolygonF& viewport,QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
         void drawHighlight(QPainter& p);
 
         IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
diff --git a/src/gis/prj/IGisProject.cpp b/src/gis/prj/IGisProject.cpp
index fa9624e..ecae454 100644
--- a/src/gis/prj/IGisProject.cpp
+++ b/src/gis/prj/IGisProject.cpp
@@ -386,7 +386,7 @@ void IGisProject::insertCopyOfItem(IGisItem * item, int off, int& lastResult)
     }
 }
 
-void IGisProject::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, CGisDraw * gis)
+void IGisProject::drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis)
 {
     for(int i = 0; i < childCount(); i++)
     {
@@ -401,12 +401,6 @@ void IGisProject::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& b
             continue;
         }
 
-//        if(seenKeys.contains(item->getKey()))
-//        {
-//            continue;
-//        }
-//        seenKeys << item->getKey();
-
         item->drawItem(p, viewport, blockedAreas, gis);
     }
 
@@ -429,7 +423,7 @@ void IGisProject::drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis)
 
 }
 
-void IGisProject::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, const QFontMetricsF& fm, CGisDraw * gis)
+void IGisProject::drawLabel(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis)
 {
 
     for(int i = 0; i < childCount(); i++)
@@ -445,12 +439,6 @@ void IGisProject::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>&
             continue;
         }
 
-//        if(seenKeys.contains(item->getKey()))
-//        {
-//            continue;
-//        }
-//        seenKeys << item->getKey();
-
         item->drawLabel(p, viewport, blockedAreas, fm, gis);
     }
 
diff --git a/src/gis/prj/IGisProject.h b/src/gis/prj/IGisProject.h
index d38a4e6..13c6edd 100644
--- a/src/gis/prj/IGisProject.h
+++ b/src/gis/prj/IGisProject.h
@@ -81,11 +81,11 @@ class IGisProject : public QTreeWidgetItem
         /**
            @brief Save the project using it's native format.
          */
-        virtual void save() = 0;
+        virtual bool save() = 0;
         /**
            @brief Save the project selecting one of the available formats.
         */
-        virtual void saveAs() = 0;
+        virtual bool saveAs() = 0;
 
         virtual void setFilename(const QString& fn){filename = fn;}
         virtual QString getFilename() const {return filename;}
@@ -167,8 +167,8 @@ class IGisProject : public QTreeWidgetItem
          */
         bool  isValid() const {return valid;}
 
-        void drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, CGisDraw * gis);
-        void drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, const QFontMetricsF& fm, CGisDraw * gis);
+        void drawItem(QPainter& p, const QPolygonF &viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
+        void drawLabel(QPainter& p, const QPolygonF &viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
         void drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis);
 
         /**
diff --git a/src/gis/qms/CQmsProject.cpp b/src/gis/qms/CQmsProject.cpp
index 11bc2b0..bc4fe7a 100644
--- a/src/gis/qms/CQmsProject.cpp
+++ b/src/gis/qms/CQmsProject.cpp
@@ -68,21 +68,25 @@ CQmsProject::~CQmsProject()
 }
 
 
-void CQmsProject::save()
+bool CQmsProject::save()
 {
 
     if(filename.isEmpty())
     {
-        saveAs();
+        return saveAs();
     }
     else
     {
-        saveAs(filename, *this);
-        markAsSaved();
+        if(saveAs(filename, *this))
+        {
+            markAsSaved();
+        }
     }
+
+    return true;
 }
 
-void CQmsProject::saveAs()
+bool CQmsProject::saveAs()
 {
     SETTINGS;
     QString path = cfg.value("Paths/lastGisPath", QDir::homePath()).toString();
@@ -92,13 +96,14 @@ void CQmsProject::saveAs()
 
     if(fn.isEmpty())
     {
-        return;
+        return false;
     }
 
 
+    bool res = false;
     if(filter == "*.gpx")
     {
-        CGpxProject::saveAs(fn, *this);
+        res = CGpxProject::saveAs(fn, *this);
     }
     else if(filter == "*.qms")
     {
@@ -106,20 +111,24 @@ void CQmsProject::saveAs()
         metadata.name.clear();
         setupName(QFileInfo(filename).baseName().replace("_", " "));
 
-        saveAs(fn, *this);
-        markAsSaved();
+        res = saveAs(fn, *this);
+        if(res)
+        {
+            markAsSaved();
+        }
     }
     else
     {
-        return;
+        return false;
     }
 
     path = QFileInfo(fn).absolutePath();
     cfg.setValue("Paths/lastGisPath", path);
 
+    return res;
 }
 
-void CQmsProject::saveAs(const QString& fn, IGisProject& project)
+bool CQmsProject::saveAs(const QString& fn, IGisProject& project)
 {
     QString _fn_ = fn;
     QFileInfo fi(_fn_);
@@ -134,7 +143,7 @@ void CQmsProject::saveAs(const QString& fn, IGisProject& project)
     if(!file.open(QIODevice::WriteOnly))
     {
         QMessageBox::critical(0, QObject::tr("Failed to open..."), QObject::tr("Failed to open %1").arg(_fn_), QMessageBox::Abort);
-        return;
+        return false;
     }
     QDataStream out(&file);
     out.setByteOrder(QDataStream::LittleEndian);
@@ -148,5 +157,7 @@ void CQmsProject::saveAs(const QString& fn, IGisProject& project)
     project.setFilename(tmp);
 
     file.close();
+
+    return true;
 }
 
diff --git a/src/gis/qms/CQmsProject.h b/src/gis/qms/CQmsProject.h
index 0ffc628..c838935 100644
--- a/src/gis/qms/CQmsProject.h
+++ b/src/gis/qms/CQmsProject.h
@@ -27,10 +27,10 @@ class CQmsProject : public IGisProject
         CQmsProject(const QString& filename, CGisListWks * parent);
         virtual ~CQmsProject();
 
-        void save();
-        void saveAs();
+        bool save();
+        bool saveAs();
 
-        static void saveAs(const QString& fn, IGisProject& project);
+        static bool saveAs(const QString& fn, IGisProject& project);
 
 };
 
diff --git a/src/gis/rte/CGisItemRte.cpp b/src/gis/rte/CGisItemRte.cpp
index b6be611..9486ea0 100644
--- a/src/gis/rte/CGisItemRte.cpp
+++ b/src/gis/rte/CGisItemRte.cpp
@@ -162,16 +162,16 @@ void CGisItemRte::gainUserFocus(bool yes)
 }
 
 
-void CGisItemRte::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, CGisDraw *gis)
+void CGisItemRte::drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF> &blockedAreas, CGisDraw *gis)
 {
     line.clear();
-    if(!viewport.intersects(boundingRect))
+    if(!isVisible(boundingRect, viewport, gis))
     {
         return;
     }
 
-    QPointF p1 = viewport.topLeft();
-    QPointF p2 = viewport.bottomRight();
+    QPointF p1 = viewport[0];
+    QPointF p2 = viewport[2];
     gis->convertRad2Px(p1);
     gis->convertRad2Px(p2);
     QRectF extViewport(p1,p2);
@@ -206,9 +206,9 @@ void CGisItemRte::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &b
 
 }
 
-void CGisItemRte::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, const QFontMetricsF &fm, CGisDraw *gis)
+void CGisItemRte::drawLabel(QPainter& p, const QPolygonF& viewport, QList<QRectF> &blockedAreas, const QFontMetricsF &fm, CGisDraw *gis)
 {
-    if(!viewport.intersects(boundingRect))
+    if(!isVisible(boundingRect, viewport, gis))
     {
         return;
     }
diff --git a/src/gis/rte/CGisItemRte.h b/src/gis/rte/CGisItemRte.h
index 6a8b756..1ab630f 100644
--- a/src/gis/rte/CGisItemRte.h
+++ b/src/gis/rte/CGisItemRte.h
@@ -51,8 +51,8 @@ class CGisItemRte : public IGisItem, public IGisLine
         QString getInfo() const;
         IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
         QPointF getPointCloseBy(const QPoint& screenPos);
-        void drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
-        void drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
+        void drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
+        void drawLabel(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
         void drawHighlight(QPainter& p);
         void save(QDomNode& gpx);
         bool isCloseTo(const QPointF& pos);
diff --git a/src/gis/search/CSearchGoogle.h b/src/gis/search/CSearchGoogle.h
index e541d87..462786d 100644
--- a/src/gis/search/CSearchGoogle.h
+++ b/src/gis/search/CSearchGoogle.h
@@ -34,8 +34,8 @@ class CSearchGoogle : public QObject, public IGisProject
         CSearchGoogle(CGisListWks * parent);
         virtual ~CSearchGoogle();
 
-        void save(){}
-        void saveAs(){}
+        bool save(){return false;}
+        bool saveAs(){return false;}
 
     private slots:
         void slotChangeSymbol();
diff --git a/src/gis/trk/CDetailsTrk.cpp b/src/gis/trk/CDetailsTrk.cpp
index 3b22b1f..56a0184 100644
--- a/src/gis/trk/CDetailsTrk.cpp
+++ b/src/gis/trk/CDetailsTrk.cpp
@@ -17,6 +17,14 @@
 **********************************************************************************************/
 
 #include "gis/trk/CDetailsTrk.h"
+#include "gis/trk/filter/CFilterDouglasPeuker.h"
+#include "gis/trk/filter/CFilterDelete.h"
+#include "gis/trk/filter/CFilterMedian.h"
+#include "gis/trk/filter/CFilterReplaceElevation.h"
+#include "gis/trk/filter/CFilterOffsetElevation.h"
+#include "gis/trk/filter/CFilterNewDate.h"
+#include "gis/trk/filter/CFilterObscureDate.h"
+#include "gis/trk/filter/CFilterSpeed.h"
 #include "helpers/CSettings.h"
 #include "helpers/CTextEditWidget.h"
 #include "helpers/CLinksDialog.h"
@@ -42,6 +50,48 @@ CDetailsTrk::CDetailsTrk(CGisItemTrk& trk, QWidget *parent)
 
     setupGui();
 
+    QTreeWidgetItem * item, * item0;
+    item0 = new QTreeWidgetItem(treeFilter);
+    item0->setIcon(0, QIcon("://icons/48x48/PointHide.png"));
+    item0->setText(0, tr("Reduce visible track points"));
+
+    item = new QTreeWidgetItem(item0);
+    treeFilter->setItemWidget(item,0, new CFilterDouglasPeuker(trk, treeFilter));
+
+    item = new QTreeWidgetItem(item0);
+    treeFilter->setItemWidget(item,0, new CFilterDelete(trk, treeFilter));
+
+    item0 = new QTreeWidgetItem(treeFilter);
+    item0->setIcon(0, QIcon("://icons/48x48/SetEle.png"));
+    item0->setText(0, tr("Change elevation of track points"));
+
+    item = new QTreeWidgetItem(item0);
+    treeFilter->setItemWidget(item,0, new CFilterMedian(trk, treeFilter));
+
+    item = new QTreeWidgetItem(item0);
+    treeFilter->setItemWidget(item,0, new CFilterReplaceElevation(trk, treeFilter));
+
+    item = new QTreeWidgetItem(item0);
+    treeFilter->setItemWidget(item,0, new CFilterOffsetElevation(trk, treeFilter));
+
+    item0 = new QTreeWidgetItem(treeFilter);
+    item0->setIcon(0, QIcon("://icons/48x48/Time.png"));
+    item0->setText(0, tr("Change timestamp of track points"));
+
+    item = new QTreeWidgetItem(item0);
+    treeFilter->setItemWidget(item,0, new CFilterNewDate(trk, treeFilter));
+
+    item = new QTreeWidgetItem(item0);
+    treeFilter->setItemWidget(item,0, new CFilterObscureDate(trk, treeFilter));
+
+    item = new QTreeWidgetItem(item0);
+    treeFilter->setItemWidget(item,0, new CFilterSpeed(trk, treeFilter));
+
+    item0 = new QTreeWidgetItem(treeFilter);
+    item0->setIcon(0, QIcon("://icons/48x48/TrkCut.png"));
+    item0->setText(0, tr("Cut track into pieces"));
+
+
     SETTINGS;
     cfg.beginGroup("TrackDetails");
     checkProfile->setChecked(cfg.value("showProfile", true).toBool());
@@ -91,6 +141,8 @@ void CDetailsTrk::setupGui()
     QString str, val, unit;
     bool isReadOnly = trk.isReadOnly();
 
+    tabWidget->widget(2)->setEnabled(!isReadOnly);
+
     if(trk.isTainted())
     {
         labelTainted->show();
diff --git a/src/gis/trk/CGisItemTrk.cpp b/src/gis/trk/CGisItemTrk.cpp
index 176a533..c41ebb1 100644
--- a/src/gis/trk/CGisItemTrk.cpp
+++ b/src/gis/trk/CGisItemTrk.cpp
@@ -809,18 +809,19 @@ bool CGisItemTrk::cut()
         return(false);
     }
 
-    IGisProject * project = dynamic_cast<IGisProject*>(parent());
-    if(project == 0)
-    {
-        return(false);
-    }
-
     QString name1 = getName() + QString(" (%1 - %2)").arg(0).arg(mouseClickFocus->idxTotal);
     name1 = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, name1);
     if(name1.isEmpty())
     {
         return(false);
     }
+
+    IGisProject * project = CGisWidget::self().selectProject();
+    if(project == 0)
+    {
+        return false;
+    }
+
     new CGisItemTrk(name1, 0, mouseClickFocus->idxTotal, trk, project);
 
     name1 = getName() + QString(" (%1 - %2)").arg(mouseClickFocus->idxTotal).arg(cntTotalPoints-1);
@@ -829,6 +830,13 @@ bool CGisItemTrk::cut()
     {
         return(false);
     }
+
+    project = CGisWidget::self().selectProject();
+    if(project == 0)
+    {
+        return false;
+    }
+
     new CGisItemTrk(name1, mouseClickFocus->idxTotal, cntTotalPoints-1, trk, project);
 
     return(true);
@@ -836,19 +844,22 @@ bool CGisItemTrk::cut()
 
 void CGisItemTrk::reverse()
 {
-    IGisProject * project = dynamic_cast<IGisProject*>(parent());
-    if(project == 0)
+
+
+    QString name1 = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, getName() + "_rev");
+    if(name1.isEmpty())
     {
         return;
     }
 
-    QString name1 = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, getName() + "_rev");
-    if(name1.isEmpty())
+    IGisProject * project = CGisWidget::self().selectProject();
+    if(project == 0)
     {
         return;
     }
 
     CGisItemTrk * trk1 = new CGisItemTrk(*this, project, -1, false);
+    trk1->key.item.clear();
 
     trk1->trk.name = name1;
     trk1->trk.segs.clear();
@@ -891,7 +902,13 @@ void CGisItemTrk::combine()
         return;
     }
 
-    CGisItemTrk * trk1 = new CGisItemTrk(*this, project, -1, false);
+    IGisProject * projectNew = CGisWidget::self().selectProject();
+    if(projectNew == 0)
+    {
+        return;
+    }
+
+    CGisItemTrk * trk1 = new CGisItemTrk(*this, projectNew, -1, false);
 
     trk1->trk.name = name1;
     trk1->trk.segs.clear();
@@ -1020,19 +1037,19 @@ void CGisItemTrk::copySelectedPoints()
     new CGisItemTrk(name1, idx1, idx2, trk, project);
 }
 
-void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, CGisDraw *gis)
+void CGisItemTrk::drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF> &blockedAreas, CGisDraw *gis)
 {
     lineSimple.clear();
     lineFull.clear();
 
-    if(!viewport.intersects(boundingRect))
+    if(!isVisible(boundingRect, viewport,gis))
     {
         return;
     }
 
     QPointF pt1;
-    QPointF p1 = viewport.topLeft();
-    QPointF p2 = viewport.bottomRight();
+    QPointF p1 = viewport[0];
+    QPointF p2 = viewport[2];
     gis->convertRad2Px(p1);
     gis->convertRad2Px(p2);
     QRectF extViewport(p1,p2);
@@ -1231,7 +1248,7 @@ void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis)
     }
 }
 
-void CGisItemTrk::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, const QFontMetricsF &fm, CGisDraw *gis)
+void CGisItemTrk::drawLabel(QPainter& p, const QPolygonF &viewport, QList<QRectF> &blockedAreas, const QFontMetricsF &fm, CGisDraw *gis)
 {
     // tracks have no labels
 }
diff --git a/src/gis/trk/CGisItemTrk.h b/src/gis/trk/CGisItemTrk.h
index 39417b7..da2efc6 100644
--- a/src/gis/trk/CGisItemTrk.h
+++ b/src/gis/trk/CGisItemTrk.h
@@ -91,9 +91,9 @@ class CGisItemTrk : public IGisItem, public IGisLine
         QPointF getPointCloseBy(const QPoint& screenPos);
         bool isCloseTo(const QPointF& pos);
 
-        void drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
+        void drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
         void drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis);
-        void drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
+        void drawLabel(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
         void drawHighlight(QPainter& p);
         void drawRange(QPainter& p);
         void save(QDomNode& gpx);
@@ -222,6 +222,29 @@ class CGisItemTrk : public IGisItem, public IGisLine
         */
         void setMouseFocusByIndex(qint32 idx, focusmode_e mode);
 
+        /**
+           @brief Reduce the amount of visible track points with the help of the Douglas Peuker algorithm
+
+           @note All filter implementations are found in src/gis/trk/filter/filter.cpp
+
+           @param dist
+         */
+        void filterReducePoints(qreal dist);
+
+        void filterDelete();
+
+        void filterSmoothProfile(int points);
+
+        void filterReplaceElevation();
+
+        void filterOffsetElevation(int offset);
+
+        void filterNewDate(const QDateTime& date);
+
+        void filterObscureDate(int delta);
+
+        void filterSpeed(qreal speed);
+
         static const QColor  lineColors[TRK_N_COLORS];
         static const QString bulletColors[TRK_N_COLORS];
 
diff --git a/src/gis/trk/IDetailsTrk.ui b/src/gis/trk/IDetailsTrk.ui
index f6551c0..9c8f1ec 100644
--- a/src/gis/trk/IDetailsTrk.ui
+++ b/src/gis/trk/IDetailsTrk.ui
@@ -394,6 +394,43 @@
         </item>
        </layout>
       </widget>
+      <widget class="QWidget" name="tabFilter">
+       <attribute name="title">
+        <string>Filter</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_6">
+        <property name="spacing">
+         <number>0</number>
+        </property>
+        <property name="leftMargin">
+         <number>0</number>
+        </property>
+        <property name="topMargin">
+         <number>0</number>
+        </property>
+        <property name="rightMargin">
+         <number>0</number>
+        </property>
+        <property name="bottomMargin">
+         <number>0</number>
+        </property>
+        <item>
+         <widget class="QTreeWidget" name="treeFilter">
+          <property name="selectionMode">
+           <enum>QAbstractItemView::NoSelection</enum>
+          </property>
+          <attribute name="headerVisible">
+           <bool>false</bool>
+          </attribute>
+          <column>
+           <property name="text">
+            <string notr="true">1</string>
+           </property>
+          </column>
+         </widget>
+        </item>
+       </layout>
+      </widget>
       <widget class="QWidget" name="tab_4">
        <attribute name="title">
         <string>Hist.</string>
@@ -415,7 +452,14 @@
          <number>0</number>
         </property>
         <item>
-         <widget class="CHistoryListWidget" name="listHistory"/>
+         <widget class="CHistoryListWidget" name="listHistory">
+          <property name="iconSize">
+           <size>
+            <width>32</width>
+            <height>32</height>
+           </size>
+          </property>
+         </widget>
         </item>
        </layout>
       </widget>
diff --git a/src/gis/qms/CQmsProject.h b/src/gis/trk/filter/CFilterDelete.cpp
similarity index 66%
copy from src/gis/qms/CQmsProject.h
copy to src/gis/trk/filter/CFilterDelete.cpp
index 0ffc628..9b83bd5 100644
--- a/src/gis/qms/CQmsProject.h
+++ b/src/gis/trk/filter/CFilterDelete.cpp
@@ -16,23 +16,26 @@
 
 **********************************************************************************************/
 
-#ifndef CQMSPROJECT_H
-#define CQMSPROJECT_H
+#include "gis/trk/filter/CFilterDelete.h"
+#include "gis/trk/CGisItemTrk.h"
 
-#include "gis/prj/IGisProject.h"
-
-class CQmsProject : public IGisProject
+CFilterDelete::CFilterDelete(CGisItemTrk &trk, QWidget *parent)
+    : QWidget(parent)
+    , trk(trk)
 {
-    public:
-        CQmsProject(const QString& filename, CGisListWks * parent);
-        virtual ~CQmsProject();
-
-        void save();
-        void saveAs();
+    setupUi(this);
 
-        static void saveAs(const QString& fn, IGisProject& project);
+    connect(toolApply, SIGNAL(clicked()), this, SLOT(slotApply()));
+}
 
-};
+CFilterDelete::~CFilterDelete()
+{
 
-#endif //CQMSPROJECT_H
+}
 
+void CFilterDelete::slotApply()
+{
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+    trk.filterDelete();
+    QApplication::restoreOverrideCursor();
+}
diff --git a/src/gis/db/CLostFoundProject.h b/src/gis/trk/filter/CFilterDelete.h
similarity index 70%
copy from src/gis/db/CLostFoundProject.h
copy to src/gis/trk/filter/CFilterDelete.h
index abd998a..18e6c5c 100644
--- a/src/gis/db/CLostFoundProject.h
+++ b/src/gis/trk/filter/CFilterDelete.h
@@ -16,24 +16,28 @@
 
 **********************************************************************************************/
 
-#ifndef CLOSTFOUNDPROJECT_H
-#define CLOSTFOUNDPROJECT_H
+#ifndef CFILTERDELETE_H
+#define CFILTERDELETE_H
 
-#include "gis/db/CDBProject.h"
-#include <QSqlDatabase>
+#include <QWidget>
+#include "ui_IFilterDelete.h"
 
-class CLostFoundProject : public CDBProject
+class CGisItemTrk;
+
+class CFilterDelete : public QWidget, private Ui::IFilterDelete
 {
+    Q_OBJECT
     public:
-        CLostFoundProject(const QString &dbName, CGisListWks * parent);
-
-        virtual ~CLostFoundProject();
+        CFilterDelete(CGisItemTrk& trk, QWidget * parent);
+        virtual ~CFilterDelete();
 
-        void save(){}
+    private slots:
+        void slotApply();
 
-        void updateFromDb();
+    private:
+        CGisItemTrk& trk;
 
 };
 
-#endif //CLOSTFOUNDPROJECT_H
+#endif //CFILTERDELETE_H
 
diff --git a/src/mouse/CScrOptRangeTrk.cpp b/src/gis/trk/filter/CFilterDouglasPeuker.cpp
similarity index 54%
copy from src/mouse/CScrOptRangeTrk.cpp
copy to src/gis/trk/filter/CFilterDouglasPeuker.cpp
index cf17ce7..789f137 100644
--- a/src/mouse/CScrOptRangeTrk.cpp
+++ b/src/gis/trk/filter/CFilterDouglasPeuker.cpp
@@ -16,33 +16,37 @@
 
 **********************************************************************************************/
 
-#include "mouse/CScrOptRangeTrk.h"
+#include "gis/trk/filter/CFilterDouglasPeuker.h"
 #include "gis/trk/CGisItemTrk.h"
-#include "CMainWindow.h"
+#include "helpers/CSettings.h"
+#include "units/IUnit.h"
 
 #include <QtWidgets>
 
-CScrOptRangeTrk::CScrOptRangeTrk(const QPointF &point, CGisItemTrk * trk, QWidget *parent)
-    : IScrOpt(parent)
+CFilterDouglasPeuker::CFilterDouglasPeuker(CGisItemTrk &trk, QWidget * parent)
+    : QWidget(parent)
+    , trk(trk)
 {
-    setupUi(this);    
-    label->setFont(CMainWindow::self().getMapFont());
-    label->setText(trk->getInfoRange());
-    adjustSize();
+    setupUi(this);
 
-    setOrigin(point.toPoint());
+    spinBox->setSuffix(IUnit::self().baseunit);
 
-    move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
-    show();
-}
+    SETTINGS;
+    spinBox->setValue(cfg.value("TrackDetails/Filter/DouglasPeuker/distance",5).toInt());
 
-CScrOptRangeTrk::~CScrOptRangeTrk()
-{
+    connect(toolApply, SIGNAL(clicked()), this, SLOT(slotApply()));
 
 }
 
-void CScrOptRangeTrk::draw(QPainter& p)
+CFilterDouglasPeuker::~CFilterDouglasPeuker()
 {
-    drawBubble2(origin, p);
+    SETTINGS;
+    cfg.setValue("TrackDetails/Filter/DouglasPeuker/distance", spinBox->value());
 }
 
+void CFilterDouglasPeuker::slotApply()
+{
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+    trk.filterReducePoints(spinBox->value()/IUnit::self().basefactor);    
+    QApplication::restoreOverrideCursor();
+}
diff --git a/src/gis/db/CLostFoundProject.h b/src/gis/trk/filter/CFilterDouglasPeuker.h
similarity index 67%
copy from src/gis/db/CLostFoundProject.h
copy to src/gis/trk/filter/CFilterDouglasPeuker.h
index abd998a..0ad9cb9 100644
--- a/src/gis/db/CLostFoundProject.h
+++ b/src/gis/trk/filter/CFilterDouglasPeuker.h
@@ -16,24 +16,27 @@
 
 **********************************************************************************************/
 
-#ifndef CLOSTFOUNDPROJECT_H
-#define CLOSTFOUNDPROJECT_H
+#ifndef CFILTERDOUGLASPEUKER_H
+#define CFILTERDOUGLASPEUKER_H
 
-#include "gis/db/CDBProject.h"
-#include <QSqlDatabase>
+#include <QWidget>
+#include "ui_IFilterDouglasPeuker.h"
 
-class CLostFoundProject : public CDBProject
+class CGisItemTrk;
+
+class CFilterDouglasPeuker : public QWidget, private Ui::IFilterDouglasPeuker
 {
+    Q_OBJECT
     public:
-        CLostFoundProject(const QString &dbName, CGisListWks * parent);
-
-        virtual ~CLostFoundProject();
-
-        void save(){}
+        CFilterDouglasPeuker(CGisItemTrk& trk, QWidget *parent);
+        virtual ~CFilterDouglasPeuker();
 
-        void updateFromDb();
+    private slots:
+        void slotApply();
 
+    private:
+        CGisItemTrk& trk;
 };
 
-#endif //CLOSTFOUNDPROJECT_H
+#endif //CFILTERDOUGLASPEUKER_H
 
diff --git a/src/mouse/CScrOptRangeTrk.cpp b/src/gis/trk/filter/CFilterMedian.cpp
similarity index 58%
copy from src/mouse/CScrOptRangeTrk.cpp
copy to src/gis/trk/filter/CFilterMedian.cpp
index cf17ce7..ee9d1c2 100644
--- a/src/mouse/CScrOptRangeTrk.cpp
+++ b/src/gis/trk/filter/CFilterMedian.cpp
@@ -16,33 +16,34 @@
 
 **********************************************************************************************/
 
-#include "mouse/CScrOptRangeTrk.h"
+#include "gis/trk/filter/CFilterMedian.h"
 #include "gis/trk/CGisItemTrk.h"
-#include "CMainWindow.h"
+#include "helpers/CSettings.h"
+#include "units/IUnit.h"
 
-#include <QtWidgets>
-
-CScrOptRangeTrk::CScrOptRangeTrk(const QPointF &point, CGisItemTrk * trk, QWidget *parent)
-    : IScrOpt(parent)
+CFilterMedian::CFilterMedian(CGisItemTrk &trk, QWidget *parent)
+    : QWidget(parent)
+    , trk(trk)
 {
-    setupUi(this);    
-    label->setFont(CMainWindow::self().getMapFont());
-    label->setText(trk->getInfoRange());
-    adjustSize();
+    setupUi(this);
+
+    SETTINGS;
+    spinBox->setValue(cfg.value("TrackDetails/Filter/Median/points",5).toInt());
 
-    setOrigin(point.toPoint());
+    connect(toolApply, SIGNAL(clicked()), this, SLOT(slotApply()));
 
-    move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
-    show();
 }
 
-CScrOptRangeTrk::~CScrOptRangeTrk()
+CFilterMedian::~CFilterMedian()
 {
+    SETTINGS;
+    cfg.setValue("TrackDetails/Filter/Median/points", spinBox->value());
 
 }
 
-void CScrOptRangeTrk::draw(QPainter& p)
+void CFilterMedian::slotApply()
 {
-    drawBubble2(origin, p);
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+    trk.filterSmoothProfile(spinBox->value());
+    QApplication::restoreOverrideCursor();
 }
-
diff --git a/src/gis/qms/CQmsProject.h b/src/gis/trk/filter/CFilterMedian.h
similarity index 70%
copy from src/gis/qms/CQmsProject.h
copy to src/gis/trk/filter/CFilterMedian.h
index 0ffc628..a8d009e 100644
--- a/src/gis/qms/CQmsProject.h
+++ b/src/gis/trk/filter/CFilterMedian.h
@@ -16,23 +16,27 @@
 
 **********************************************************************************************/
 
-#ifndef CQMSPROJECT_H
-#define CQMSPROJECT_H
+#ifndef CFILTERMEDIAN_H
+#define CFILTERMEDIAN_H
 
-#include "gis/prj/IGisProject.h"
+#include <QWidget>
+#include "ui_IFilterMedian.h"
 
-class CQmsProject : public IGisProject
+class CGisItemTrk;
+
+class CFilterMedian : public QWidget, private Ui::IFilterMedian
 {
+    Q_OBJECT
     public:
-        CQmsProject(const QString& filename, CGisListWks * parent);
-        virtual ~CQmsProject();
-
-        void save();
-        void saveAs();
+        CFilterMedian(CGisItemTrk& trk, QWidget * parent);
+        virtual ~CFilterMedian();
 
-        static void saveAs(const QString& fn, IGisProject& project);
+    private slots:
+        void slotApply();
 
+    private:
+        CGisItemTrk& trk;
 };
 
-#endif //CQMSPROJECT_H
+#endif //CFILTERMEDIAN_H
 
diff --git a/src/mouse/CScrOptRangeTrk.cpp b/src/gis/trk/filter/CFilterNewDate.cpp
similarity index 63%
copy from src/mouse/CScrOptRangeTrk.cpp
copy to src/gis/trk/filter/CFilterNewDate.cpp
index cf17ce7..7c5a8f0 100644
--- a/src/mouse/CScrOptRangeTrk.cpp
+++ b/src/gis/trk/filter/CFilterNewDate.cpp
@@ -16,33 +16,30 @@
 
 **********************************************************************************************/
 
-#include "mouse/CScrOptRangeTrk.h"
+#include "gis/trk/filter/CFilterNewDate.h"
 #include "gis/trk/CGisItemTrk.h"
-#include "CMainWindow.h"
 
-#include <QtWidgets>
-
-CScrOptRangeTrk::CScrOptRangeTrk(const QPointF &point, CGisItemTrk * trk, QWidget *parent)
-    : IScrOpt(parent)
+CFilterNewDate::CFilterNewDate(CGisItemTrk &trk, QWidget *parent)
+    : QWidget(parent)
+    , trk(trk)
 {
-    setupUi(this);    
-    label->setFont(CMainWindow::self().getMapFont());
-    label->setText(trk->getInfoRange());
-    adjustSize();
+    setupUi(this);
 
-    setOrigin(point.toPoint());
+    dateTimeEdit->setDateTime(QDateTime::currentDateTime());
 
-    move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
-    show();
+    connect(toolApply, SIGNAL(clicked()), this, SLOT(slotApply()));
 }
 
-CScrOptRangeTrk::~CScrOptRangeTrk()
+CFilterNewDate::~CFilterNewDate()
 {
 
 }
 
-void CScrOptRangeTrk::draw(QPainter& p)
+
+void CFilterNewDate::slotApply()
 {
-    drawBubble2(origin, p);
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+    trk.filterNewDate(dateTimeEdit->dateTime().toUTC());
+    QApplication::restoreOverrideCursor();
 }
 
diff --git a/src/gis/db/CLostFoundProject.h b/src/gis/trk/filter/CFilterNewDate.h
similarity index 69%
copy from src/gis/db/CLostFoundProject.h
copy to src/gis/trk/filter/CFilterNewDate.h
index abd998a..26f7e3f 100644
--- a/src/gis/db/CLostFoundProject.h
+++ b/src/gis/trk/filter/CFilterNewDate.h
@@ -16,24 +16,28 @@
 
 **********************************************************************************************/
 
-#ifndef CLOSTFOUNDPROJECT_H
-#define CLOSTFOUNDPROJECT_H
+#ifndef CFILTERNEWDATE_H
+#define CFILTERNEWDATE_H
 
-#include "gis/db/CDBProject.h"
-#include <QSqlDatabase>
+#include <QWidget>
+#include "ui_IFilterNewDate.h"
 
-class CLostFoundProject : public CDBProject
+class CGisItemTrk;
+
+class CFilterNewDate : public QWidget, private Ui::IFilterNewDate
 {
+    Q_OBJECT
     public:
-        CLostFoundProject(const QString &dbName, CGisListWks * parent);
-
-        virtual ~CLostFoundProject();
+        CFilterNewDate(CGisItemTrk& trk, QWidget * parent);
+        virtual ~CFilterNewDate();
 
-        void save(){}
+    private slots:
+        void slotApply();
 
-        void updateFromDb();
+    private:
+        CGisItemTrk& trk;
 
 };
 
-#endif //CLOSTFOUNDPROJECT_H
+#endif //CFILTERNEWDATE_H
 
diff --git a/src/mouse/CScrOptRangeTrk.cpp b/src/gis/trk/filter/CFilterObscureDate.cpp
similarity index 57%
copy from src/mouse/CScrOptRangeTrk.cpp
copy to src/gis/trk/filter/CFilterObscureDate.cpp
index cf17ce7..2b68f7c 100644
--- a/src/mouse/CScrOptRangeTrk.cpp
+++ b/src/gis/trk/filter/CFilterObscureDate.cpp
@@ -16,33 +16,32 @@
 
 **********************************************************************************************/
 
-#include "mouse/CScrOptRangeTrk.h"
+#include "gis/trk/filter/CFilterObscureDate.h"
 #include "gis/trk/CGisItemTrk.h"
-#include "CMainWindow.h"
+#include "helpers/CSettings.h"
 
-#include <QtWidgets>
-
-CScrOptRangeTrk::CScrOptRangeTrk(const QPointF &point, CGisItemTrk * trk, QWidget *parent)
-    : IScrOpt(parent)
+CFilterObscureDate::CFilterObscureDate(CGisItemTrk &trk, QWidget *parent)
+    : QWidget(parent)
+    , trk(trk)
 {
-    setupUi(this);    
-    label->setFont(CMainWindow::self().getMapFont());
-    label->setText(trk->getInfoRange());
-    adjustSize();
+    setupUi(this);
 
-    setOrigin(point.toPoint());
+    SETTINGS;
+    spinBox->setValue(cfg.value("TrackDetails/Filter/ObscureTimestamp/delta",0).toInt());
 
-    move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
-    show();
+    connect(toolApply, SIGNAL(clicked()), this, SLOT(slotApply()));
 }
 
-CScrOptRangeTrk::~CScrOptRangeTrk()
+CFilterObscureDate::~CFilterObscureDate()
 {
-
+    SETTINGS;
+    cfg.setValue("TrackDetails/Filter/ObscureTimestamp/delta", spinBox->value());
 }
 
-void CScrOptRangeTrk::draw(QPainter& p)
+void CFilterObscureDate::slotApply()
 {
-    drawBubble2(origin, p);
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+    trk.filterObscureDate(spinBox->value());
+    QApplication::restoreOverrideCursor();
 }
 
diff --git a/src/gis/qms/CQmsProject.h b/src/gis/trk/filter/CFilterObscureDate.h
similarity index 68%
copy from src/gis/qms/CQmsProject.h
copy to src/gis/trk/filter/CFilterObscureDate.h
index 0ffc628..d8d1da0 100644
--- a/src/gis/qms/CQmsProject.h
+++ b/src/gis/trk/filter/CFilterObscureDate.h
@@ -16,23 +16,27 @@
 
 **********************************************************************************************/
 
-#ifndef CQMSPROJECT_H
-#define CQMSPROJECT_H
+#ifndef CFILTEROBSCUREDATE_H
+#define CFILTEROBSCUREDATE_H
 
-#include "gis/prj/IGisProject.h"
+#include <QWidget>
+#include "ui_IFilterObscureDate.h"
 
-class CQmsProject : public IGisProject
+class CGisItemTrk;
+
+class CFilterObscureDate : public QWidget, private Ui::IFilterObscureDate
 {
+    Q_OBJECT
     public:
-        CQmsProject(const QString& filename, CGisListWks * parent);
-        virtual ~CQmsProject();
-
-        void save();
-        void saveAs();
+        CFilterObscureDate(CGisItemTrk& trk, QWidget * parent);
+        virtual ~CFilterObscureDate();
 
-        static void saveAs(const QString& fn, IGisProject& project);
+    private slots:
+        void slotApply();
 
+    private:
+        CGisItemTrk& trk;
 };
 
-#endif //CQMSPROJECT_H
+#endif //CFILTEROBSCUREDATE_H
 
diff --git a/src/mouse/CScrOptRangeTrk.cpp b/src/gis/trk/filter/CFilterOffsetElevation.cpp
similarity index 53%
copy from src/mouse/CScrOptRangeTrk.cpp
copy to src/gis/trk/filter/CFilterOffsetElevation.cpp
index cf17ce7..393ec98 100644
--- a/src/mouse/CScrOptRangeTrk.cpp
+++ b/src/gis/trk/filter/CFilterOffsetElevation.cpp
@@ -16,33 +16,34 @@
 
 **********************************************************************************************/
 
-#include "mouse/CScrOptRangeTrk.h"
+#include "gis/trk/filter/CFilterOffsetElevation.h"
 #include "gis/trk/CGisItemTrk.h"
-#include "CMainWindow.h"
+#include "units/IUnit.h"
+#include "helpers/CSettings.h"
 
-#include <QtWidgets>
-
-CScrOptRangeTrk::CScrOptRangeTrk(const QPointF &point, CGisItemTrk * trk, QWidget *parent)
-    : IScrOpt(parent)
+CFilterOffsetElevation::CFilterOffsetElevation(CGisItemTrk &trk, QWidget *parent)
+    : QWidget(parent)
+    , trk(trk)
 {
-    setupUi(this);    
-    label->setFont(CMainWindow::self().getMapFont());
-    label->setText(trk->getInfoRange());
-    adjustSize();
+    setupUi(this);
+
+    spinBox->setSuffix(IUnit::self().baseunit);
 
-    setOrigin(point.toPoint());
+    SETTINGS;
+    spinBox->setValue(cfg.value("TrackDetails/Filter/OffsetElevation/offset",0).toInt());
 
-    move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
-    show();
+    connect(toolApply, SIGNAL(clicked()), this, SLOT(slotApply()));
 }
 
-CScrOptRangeTrk::~CScrOptRangeTrk()
+CFilterOffsetElevation::~CFilterOffsetElevation()
 {
-
+    SETTINGS;
+    cfg.setValue("TrackDetails/Filter/OffsetElevation/offset", spinBox->value());
 }
 
-void CScrOptRangeTrk::draw(QPainter& p)
+void CFilterOffsetElevation::slotApply()
 {
-    drawBubble2(origin, p);
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+    trk.filterOffsetElevation(spinBox->value()/IUnit::self().basefactor);
+    QApplication::restoreOverrideCursor();
 }
-
diff --git a/src/gis/qms/CQmsProject.h b/src/gis/trk/filter/CFilterOffsetElevation.h
similarity index 66%
copy from src/gis/qms/CQmsProject.h
copy to src/gis/trk/filter/CFilterOffsetElevation.h
index 0ffc628..f6a2688 100644
--- a/src/gis/qms/CQmsProject.h
+++ b/src/gis/trk/filter/CFilterOffsetElevation.h
@@ -16,23 +16,28 @@
 
 **********************************************************************************************/
 
-#ifndef CQMSPROJECT_H
-#define CQMSPROJECT_H
+#ifndef CFILTEROFFSETELEVATION_H
+#define CFILTEROFFSETELEVATION_H
 
-#include "gis/prj/IGisProject.h"
+#include <QWidget>
+#include "ui_IFilterOffsetElevation.h"
 
-class CQmsProject : public IGisProject
+class CGisItemTrk;
+
+class CFilterOffsetElevation : public QWidget, private Ui::IFilterOffsetElevation
 {
+    Q_OBJECT
     public:
-        CQmsProject(const QString& filename, CGisListWks * parent);
-        virtual ~CQmsProject();
+        CFilterOffsetElevation(CGisItemTrk& trk, QWidget * parent);
+        virtual ~CFilterOffsetElevation();
 
-        void save();
-        void saveAs();
+    private slots:
+        void slotApply();
 
-        static void saveAs(const QString& fn, IGisProject& project);
+    private:
+        CGisItemTrk& trk;
 
 };
 
-#endif //CQMSPROJECT_H
+#endif //CFILTEROFFSETELEVATION_H
 
diff --git a/src/mouse/CScrOptRangeTrk.cpp b/src/gis/trk/filter/CFilterReplaceElevation.cpp
similarity index 63%
copy from src/mouse/CScrOptRangeTrk.cpp
copy to src/gis/trk/filter/CFilterReplaceElevation.cpp
index cf17ce7..374ab1e 100644
--- a/src/mouse/CScrOptRangeTrk.cpp
+++ b/src/gis/trk/filter/CFilterReplaceElevation.cpp
@@ -16,33 +16,26 @@
 
 **********************************************************************************************/
 
-#include "mouse/CScrOptRangeTrk.h"
+#include "gis/trk/filter/CFilterReplaceElevation.h"
 #include "gis/trk/CGisItemTrk.h"
-#include "CMainWindow.h"
 
-#include <QtWidgets>
-
-CScrOptRangeTrk::CScrOptRangeTrk(const QPointF &point, CGisItemTrk * trk, QWidget *parent)
-    : IScrOpt(parent)
+CFilterReplaceElevation::CFilterReplaceElevation(CGisItemTrk &trk, QWidget *parent)
+    : QWidget(parent)
+    , trk(trk)
 {
-    setupUi(this);    
-    label->setFont(CMainWindow::self().getMapFont());
-    label->setText(trk->getInfoRange());
-    adjustSize();
-
-    setOrigin(point.toPoint());
+    setupUi(this);
 
-    move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
-    show();
+    connect(toolApply, SIGNAL(clicked()), this, SLOT(slotApply()));
 }
 
-CScrOptRangeTrk::~CScrOptRangeTrk()
+CFilterReplaceElevation::~CFilterReplaceElevation()
 {
 
 }
 
-void CScrOptRangeTrk::draw(QPainter& p)
+void CFilterReplaceElevation::slotApply()
 {
-    drawBubble2(origin, p);
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+    trk.filterReplaceElevation();
+    QApplication::restoreOverrideCursor();
 }
-
diff --git a/src/gis/db/CLostFoundProject.h b/src/gis/trk/filter/CFilterReplaceElevation.h
similarity index 66%
copy from src/gis/db/CLostFoundProject.h
copy to src/gis/trk/filter/CFilterReplaceElevation.h
index abd998a..fdc7749 100644
--- a/src/gis/db/CLostFoundProject.h
+++ b/src/gis/trk/filter/CFilterReplaceElevation.h
@@ -16,24 +16,28 @@
 
 **********************************************************************************************/
 
-#ifndef CLOSTFOUNDPROJECT_H
-#define CLOSTFOUNDPROJECT_H
+#ifndef CFILTERREPLACEELEVATION_H
+#define CFILTERREPLACEELEVATION_H
 
-#include "gis/db/CDBProject.h"
-#include <QSqlDatabase>
+#include <QWidget>
+#include "ui_IFilterReplaceElevation.h"
 
-class CLostFoundProject : public CDBProject
+class CGisItemTrk;
+
+class CFilterReplaceElevation : public QWidget, private Ui::IFilterReplaceElevation
 {
+    Q_OBJECT
     public:
-        CLostFoundProject(const QString &dbName, CGisListWks * parent);
-
-        virtual ~CLostFoundProject();
+        CFilterReplaceElevation(CGisItemTrk& trk, QWidget * parent);
+        virtual ~CFilterReplaceElevation();
 
-        void save(){}
+    private slots:
+        void slotApply();
 
-        void updateFromDb();
+    private:
+        CGisItemTrk& trk;
 
 };
 
-#endif //CLOSTFOUNDPROJECT_H
+#endif //CFILTERREPLACEELEVATION_H
 
diff --git a/src/mouse/CScrOptRangeTrk.cpp b/src/gis/trk/filter/CFilterSpeed.cpp
similarity index 55%
copy from src/mouse/CScrOptRangeTrk.cpp
copy to src/gis/trk/filter/CFilterSpeed.cpp
index cf17ce7..0b931e0 100644
--- a/src/mouse/CScrOptRangeTrk.cpp
+++ b/src/gis/trk/filter/CFilterSpeed.cpp
@@ -16,33 +16,35 @@
 
 **********************************************************************************************/
 
-#include "mouse/CScrOptRangeTrk.h"
+#include "gis/trk/filter/CFilterSpeed.h"
 #include "gis/trk/CGisItemTrk.h"
-#include "CMainWindow.h"
+#include "helpers/CSettings.h"
+#include "units/IUnit.h"
 
-#include <QtWidgets>
 
-CScrOptRangeTrk::CScrOptRangeTrk(const QPointF &point, CGisItemTrk * trk, QWidget *parent)
-    : IScrOpt(parent)
+CFilterSpeed::CFilterSpeed(CGisItemTrk &trk, QWidget *parent)
+    : QWidget(parent)
+    , trk(trk)
 {
-    setupUi(this);    
-    label->setFont(CMainWindow::self().getMapFont());
-    label->setText(trk->getInfoRange());
-    adjustSize();
+    setupUi(this);
 
-    setOrigin(point.toPoint());
+    doubleSpinBox->setSuffix(IUnit::self().speedunit);
 
-    move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
-    show();
+    SETTINGS;
+    doubleSpinBox->setValue(cfg.value("TrackDetails/Filter/Speed/speed",1).toDouble());
+
+    connect(toolApply, SIGNAL(clicked()), this, SLOT(slotApply()));
 }
 
-CScrOptRangeTrk::~CScrOptRangeTrk()
+CFilterSpeed::~CFilterSpeed()
 {
-
+    SETTINGS;
+    cfg.setValue("TrackDetails/Filter/Speed/speed", doubleSpinBox->value());
 }
 
-void CScrOptRangeTrk::draw(QPainter& p)
+void CFilterSpeed::slotApply()
 {
-    drawBubble2(origin, p);
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+    trk.filterSpeed(doubleSpinBox->value()/IUnit::self().speedfactor);
+    QApplication::restoreOverrideCursor();
 }
-
diff --git a/src/gis/qms/CQmsProject.h b/src/gis/trk/filter/CFilterSpeed.h
similarity index 70%
copy from src/gis/qms/CQmsProject.h
copy to src/gis/trk/filter/CFilterSpeed.h
index 0ffc628..54ff634 100644
--- a/src/gis/qms/CQmsProject.h
+++ b/src/gis/trk/filter/CFilterSpeed.h
@@ -16,23 +16,27 @@
 
 **********************************************************************************************/
 
-#ifndef CQMSPROJECT_H
-#define CQMSPROJECT_H
+#ifndef CFILTERSPEED_H
+#define CFILTERSPEED_H
 
-#include "gis/prj/IGisProject.h"
+#include <QWidget>
+#include "ui_IFilterSpeed.h"
 
-class CQmsProject : public IGisProject
+class CGisItemTrk;
+
+class CFilterSpeed : public QWidget, private Ui::IFilterSpeed
 {
+    Q_OBJECT
     public:
-        CQmsProject(const QString& filename, CGisListWks * parent);
-        virtual ~CQmsProject();
-
-        void save();
-        void saveAs();
+        CFilterSpeed(CGisItemTrk& trk, QWidget * parent);
+        virtual ~CFilterSpeed();
 
-        static void saveAs(const QString& fn, IGisProject& project);
+    private slots:
+        void slotApply();
 
+    private:
+        CGisItemTrk& trk;
 };
 
-#endif //CQMSPROJECT_H
+#endif //CFILTERSPEED_H
 
diff --git a/src/gis/trk/filter/IFilterDelete.ui b/src/gis/trk/filter/IFilterDelete.ui
new file mode 100644
index 0000000..6b19221
--- /dev/null
+++ b/src/gis/trk/filter/IFilterDelete.ui
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IFilterDelete</class>
+ <widget class="QWidget" name="IFilterDelete">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>811</width>
+    <height>82</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <item row="0" column="0" rowspan="2">
+    <widget class="QLabel" name="label_3">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../../../resources.qrc">:/icons/48x48/PointHide.png</pixmap>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string><b>Remove Track Points</b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>3</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Remove all hidden track points permanently.</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolApply">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../../resources.qrc">
+         <normaloff>:/icons/32x32/Apply.png</normaloff>:/icons/32x32/Apply.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/filter/IFilterDouglasPeuker.ui b/src/gis/trk/filter/IFilterDouglasPeuker.ui
new file mode 100644
index 0000000..edaadcd
--- /dev/null
+++ b/src/gis/trk/filter/IFilterDouglasPeuker.ui
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IFilterDouglasPeuker</class>
+ <widget class="QWidget" name="IFilterDouglasPeuker">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1001</width>
+    <height>82</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <item row="0" column="0" rowspan="2">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../../../resources.qrc">:/icons/48x48/PointHide.png</pixmap>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string><b>Hide Points (Douglas Peuker)</b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>3</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Hide track points if the distance to a line between neighboring points is less than</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="spinBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="suffix">
+        <string>m</string>
+       </property>
+       <property name="minimum">
+        <number>1</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolApply">
+       <property name="toolTip">
+        <string>Apply filter now.</string>
+       </property>
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../../resources.qrc">
+         <normaloff>:/icons/32x32/Apply.png</normaloff>:/icons/32x32/Apply.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+  </layout>
+  <zorder>label_2</zorder>
+  <zorder>line</zorder>
+  <zorder>label_3</zorder>
+ </widget>
+ <resources>
+  <include location="../../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/filter/IFilterMedian.ui b/src/gis/trk/filter/IFilterMedian.ui
new file mode 100644
index 0000000..e44e245
--- /dev/null
+++ b/src/gis/trk/filter/IFilterMedian.ui
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IFilterMedian</class>
+ <widget class="QWidget" name="IFilterMedian">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>820</width>
+    <height>58</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <item row="0" column="0" rowspan="2">
+    <widget class="QLabel" name="label_2">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../../../resources.qrc">:/icons/48x48/SetEle.png</pixmap>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string><b>Smooth Profile (Median Method)</b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>3</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Smooth deviation of the track points elevation with a Median filter of size </string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="spinBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="suffix">
+        <string>points</string>
+       </property>
+       <property name="minimum">
+        <number>5</number>
+       </property>
+       <property name="maximum">
+        <number>9</number>
+       </property>
+       <property name="singleStep">
+        <number>2</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolApply">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../../resources.qrc">
+         <normaloff>:/icons/32x32/Apply.png</normaloff>:/icons/32x32/Apply.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/filter/IFilterNewDate.ui b/src/gis/trk/filter/IFilterNewDate.ui
new file mode 100644
index 0000000..0d42f2c
--- /dev/null
+++ b/src/gis/trk/filter/IFilterNewDate.ui
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IFilterNewDate</class>
+ <widget class="QWidget" name="IFilterNewDate">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>896</width>
+    <height>58</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <item row="0" column="1">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string><b>Change Time</b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Change start of track to </string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QDateTimeEdit" name="dateTimeEdit">
+       <property name="calendarPopup">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolApply">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../../resources.qrc">
+         <normaloff>:/icons/32x32/Apply.png</normaloff>:/icons/32x32/Apply.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" rowspan="2">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../../../resources.qrc">:/icons/48x48/Time.png</pixmap>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/filter/IFilterObscureDate.ui b/src/gis/trk/filter/IFilterObscureDate.ui
new file mode 100644
index 0000000..5bf3ad3
--- /dev/null
+++ b/src/gis/trk/filter/IFilterObscureDate.ui
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IFilterObscureDate</class>
+ <widget class="QWidget" name="IFilterObscureDate">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>812</width>
+    <height>58</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <item row="0" column="0" rowspan="2">
+    <widget class="QLabel" name="label_4">
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../../../resources.qrc">:/icons/48x48/Time.png</pixmap>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string><b>Obscure Timestamps</b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Increase timestamp by</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="spinBox">
+       <property name="suffix">
+        <string> sec.</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string>with each track point. 0 sec. will remove timestamps.</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolApply">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../../resources.qrc">
+         <normaloff>:/icons/32x32/Apply.png</normaloff>:/icons/32x32/Apply.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/filter/IFilterOffsetElevation.ui b/src/gis/trk/filter/IFilterOffsetElevation.ui
new file mode 100644
index 0000000..652d2d0
--- /dev/null
+++ b/src/gis/trk/filter/IFilterOffsetElevation.ui
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IFilterOffsetElevation</class>
+ <widget class="QWidget" name="IFilterOffsetElevation">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>690</width>
+    <height>82</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <item row="0" column="0" rowspan="2">
+    <widget class="QLabel" name="label_4">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../../../resources.qrc">:/icons/48x48/SetEle.png</pixmap>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string><b>Offset Elevation</b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>3</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>Add offset of</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="spinBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="suffix">
+        <string notr="true">m</string>
+       </property>
+       <property name="minimum">
+        <number>-8000</number>
+       </property>
+       <property name="maximum">
+        <number>8000</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string>to track points elevation.</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolApply">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../../resources.qrc">
+         <normaloff>:/icons/32x32/Apply.png</normaloff>:/icons/32x32/Apply.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/filter/IFilterReplaceElevation.ui b/src/gis/trk/filter/IFilterReplaceElevation.ui
new file mode 100644
index 0000000..43958e5
--- /dev/null
+++ b/src/gis/trk/filter/IFilterReplaceElevation.ui
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IFilterReplaceElevation</class>
+ <widget class="QWidget" name="IFilterReplaceElevation">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>996</width>
+    <height>69</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <item row="0" column="0" rowspan="2">
+    <widget class="QLabel" name="label_3">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../../../resources.qrc">:/icons/48x48/SetEle.png</pixmap>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string><b>Replace Elevation Data</b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>3</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Replace elevation of track points with the values from loaded DEM files.</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolApply">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../../resources.qrc">
+         <normaloff>:/icons/32x32/Apply.png</normaloff>:/icons/32x32/Apply.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/filter/IFilterSpeed.ui b/src/gis/trk/filter/IFilterSpeed.ui
new file mode 100644
index 0000000..3964238
--- /dev/null
+++ b/src/gis/trk/filter/IFilterSpeed.ui
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IFilterSpeed</class>
+ <widget class="QWidget" name="IFilterSpeed">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>997</width>
+    <height>56</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>3</number>
+   </property>
+   <item row="0" column="1">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string><b>Change Speed</b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Set speed to </string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QDoubleSpinBox" name="doubleSpinBox">
+       <property name="suffix">
+        <string> km/h</string>
+       </property>
+       <property name="decimals">
+        <number>1</number>
+       </property>
+       <property name="singleStep">
+        <double>0.100000000000000</double>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" rowspan="2">
+    <widget class="QLabel" name="label_3">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="../../../resources.qrc">:/icons/48x48/Time.png</pixmap>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="2">
+    <widget class="QToolButton" name="toolApply">
+     <property name="text">
+      <string>...</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../../../resources.qrc">
+       <normaloff>:/icons/32x32/Apply.png</normaloff>:/icons/32x32/Apply.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>22</width>
+       <height>22</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/filter/filter.cpp b/src/gis/trk/filter/filter.cpp
new file mode 100644
index 0000000..3753eb6
--- /dev/null
+++ b/src/gis/trk/filter/filter.cpp
@@ -0,0 +1,331 @@
+/**********************************************************************************************
+    Copyright (C) 2014 Oliver Eichler oliver.eichler at gmx.de
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+**********************************************************************************************/
+
+#include "gis/trk/CGisItemTrk.h"
+#include "CMainWindow.h"
+#include "GeoMath.h"
+
+#include <proj_api.h>
+
+void CGisItemTrk::filterReducePoints(qreal dist)
+{
+
+    QVector<pointDP> line;
+
+    foreach (const trkseg_t &seg, trk.segs)
+    {
+        foreach(const trkpt_t &pt, seg.pts)
+        {
+            pointDP dp;
+            dp.x = pt.lon * DEG_TO_RAD;
+            dp.y = pt.lat * DEG_TO_RAD;
+            dp.z = pt.ele;
+            dp.used = !(pt.flags & CGisItemTrk::trkpt_t::eHidden);
+
+            line << dp;
+        }
+    }
+
+    if(line.size() < 3)
+    {
+        return;
+    }
+
+    point3D pt0 = line[0];
+
+    line[0].x = 0;
+    line[0].y = 0;
+    for(int i = 1; i < line.size(); i++)
+    {
+        qreal d, a1, a2;
+        pointDP& pt1 = line[i - 1];
+        pointDP& pt2 = line[i];
+
+        d = GPS_Math_Distance(pt0.x, pt0.y, pt2.x, pt2.y, a1, a2);
+
+        pt0 = pt2;
+
+        pt2.x = pt1.x + cos(a1 * DEG_TO_RAD) * d;
+        pt2.y = pt1.y + sin(a1 * DEG_TO_RAD) * d;
+    }
+
+    GPS_Math_DouglasPeucker(line, dist);
+
+    int cnt = 0;
+
+    for(int i = 0; i < trk.segs.size(); i++)
+    {
+        trkseg_t& seg = trk.segs[i];
+
+        for(int n = 0; n < seg.pts.size(); n++)
+        {
+            trkpt_t& pt = seg.pts[n];
+
+            if(line[cnt].used)
+            {
+                pt.flags &= ~trkpt_t::eHidden;
+            }
+            else
+            {
+                pt.flags |=  trkpt_t::eHidden;
+            }
+
+            cnt++;
+        }
+    }
+
+    QString val, unit;
+    IUnit::self().meter2distance(dist, val, unit);
+
+    deriveSecondaryData();
+    changed(QObject::tr("Hide points by Douglas Peuker algorithm (%1%2)").arg(val).arg(unit), "://icons/48x48/PointHide.png");
+}
+
+void CGisItemTrk::filterDelete()
+{
+    for(int i = 0; i < trk.segs.size(); i++)
+    {
+        QVector<trkpt_t> pts;
+        trkseg_t& seg = trk.segs[i];
+
+        for(int n = 0; n < seg.pts.size(); n++)
+        {
+            trkpt_t& pt = seg.pts[n];
+
+            if(pt.flags & trkpt_t::eHidden)
+            {
+                continue;
+            }
+
+            pts << pt;
+        }
+
+        seg.pts = pts;
+
+    }
+    deriveSecondaryData();
+    changed(QObject::tr("Permanently removed all hidden track points"), "://icons/48x48/PointHide.png");
+}
+
+void CGisItemTrk::filterSmoothProfile(int points)
+{
+
+    QVector<int> window(points, 0);
+    QVector<int> ele1, ele2;
+
+    for(int i = 0; i < trk.segs.size(); i++)
+    {
+        trkseg_t& seg = trk.segs[i];
+
+        for(int n = 0; n < seg.pts.size(); n++)
+        {
+            trkpt_t& pt = seg.pts[n];
+
+            ele1 << pt.ele;
+            ele2 << pt.ele;
+        }
+    }
+
+    if(ele1.size() < (points + 1))
+    {
+        return;
+    }
+
+    int d = points >> 1;
+    for(int i = d; i < ele1.size() - d; i++)
+    {
+        for(int n = i - d, m = 0; m < points; n++, m++)
+        {
+            window[m] = ele1[n];
+        }
+
+        qSort(window);
+        ele2[i] = window[d];
+    }
+
+    int cnt = 0;
+    for(int i = 0; i < trk.segs.size(); i++)
+    {
+        trkseg_t& seg = trk.segs[i];
+
+        for(int n = 0; n < seg.pts.size(); n++)
+        {
+            trkpt_t& pt = seg.pts[n];
+            pt.ele = ele2[cnt++];
+        }
+    }
+    deriveSecondaryData();
+    changed(QObject::tr("Smoothed profile with a Median filter of size %1").arg(points), "://icons/48x48/SetEle.png");
+
+}
+
+void CGisItemTrk::filterReplaceElevation()
+{
+    QPolygonF line;
+
+    for(int i = 0; i < trk.segs.size(); i++)
+    {
+        trkseg_t& seg = trk.segs[i];
+
+        for(int n = 0; n < seg.pts.size(); n++)
+        {
+            trkpt_t& pt = seg.pts[n];
+
+            line << QPointF(pt.lon * DEG_TO_RAD, pt.lat * DEG_TO_RAD);
+        }
+    }
+
+    QPolygonF ele(line.size());
+    CMainWindow::self().getEelevationAt(line, ele);
+
+    int cnt = 0;
+    for(int i = 0; i < trk.segs.size(); i++)
+    {
+        trkseg_t& seg = trk.segs[i];
+
+        for(int n = 0; n < seg.pts.size(); n++)
+        {
+            trkpt_t& pt = seg.pts[n];
+
+            pt.ele = ele[cnt++].y();
+        }
+    }
+
+    deriveSecondaryData();
+    changed(QObject::tr("Replaced elevation data with data from DEM files."), "://icons/48x48/SetEle.png");
+}
+
+void CGisItemTrk::filterOffsetElevation(int offset)
+{
+
+    for(int i = 0; i < trk.segs.size(); i++)
+    {
+        trkseg_t& seg = trk.segs[i];
+
+        for(int n = 0; n < seg.pts.size(); n++)
+        {
+            trkpt_t& pt = seg.pts[n];
+
+            if(pt.ele != NOINT)
+            {
+                pt.ele += offset;
+            }
+        }
+    }
+
+    QString val, unit;
+    IUnit::self().meter2elevation(offset, val, unit);
+    deriveSecondaryData();
+    changed(QObject::tr("Offset elevation data by %1%2.").arg(val).arg(unit), "://icons/48x48/SetEle.png");
+}
+
+void CGisItemTrk::filterNewDate(const QDateTime& date)
+{
+
+    qint64 delta = date.toTime_t() - timeStart.toUTC().toTime_t();
+
+    for(int i = 0; i < trk.segs.size(); i++)
+    {
+        trkseg_t& seg = trk.segs[i];
+
+        for(int n = 0; n < seg.pts.size(); n++)
+        {
+            trkpt_t& pt = seg.pts[n];
+            pt.time = pt.time.addSecs(delta);
+        }
+    }
+
+    deriveSecondaryData();
+    changed(QObject::tr("Changed start of track to %1.").arg(date.toString()), "://icons/48x48/Time.png");
+}
+
+void CGisItemTrk::filterObscureDate(int delta)
+{
+    if(delta == 0)
+    {
+        for(int i = 0; i < trk.segs.size(); i++)
+        {
+            trkseg_t& seg = trk.segs[i];
+
+            for(int n = 0; n < seg.pts.size(); n++)
+            {
+                trkpt_t& pt = seg.pts[n];
+                pt.time = QDateTime();
+            }
+        }
+
+        deriveSecondaryData();
+        changed(QObject::tr("Remove timestamps."), "://icons/48x48/Time.png");
+    }
+    else
+    {
+        QDateTime timestamp = timeStart;
+        if(!timestamp.isValid())
+        {
+            timestamp = QDateTime::currentDateTime();
+        }
+
+        for(int i = 0; i < trk.segs.size(); i++)
+        {
+            trkseg_t& seg = trk.segs[i];
+
+            for(int n = 0; n < seg.pts.size(); n++)
+            {
+                trkpt_t& pt = seg.pts[n];
+                pt.time = timestamp;
+                timestamp = timestamp.addSecs(delta);
+            }
+        }
+
+        deriveSecondaryData();
+        changed(QObject::tr("Set artifical timestamps with delta of %1 sec.").arg(delta), "://icons/48x48/Time.png");
+    }
+}
+
+void CGisItemTrk::filterSpeed(qreal speed)
+{
+
+    QDateTime timestamp = timeStart;
+    if(!timestamp.isValid())
+    {
+        timestamp = QDateTime::currentDateTime();
+    }
+
+    for(int i = 0; i < trk.segs.size(); i++)
+    {
+        trkseg_t& seg = trk.segs[i];
+
+        for(int n = 0; n < seg.pts.size(); n++)
+        {          
+            trkpt_t& pt = seg.pts[n];
+            if(pt.flags & trkpt_t::eHidden)
+            {
+                continue;
+            }
+
+            qreal dmsec = 1000 * pt.deltaDistance/speed;
+            timestamp   = timestamp.addMSecs(qRound(dmsec));
+            pt.time     = timestamp;
+        }
+    }
+
+    deriveSecondaryData();
+    QString val, unit;
+    IUnit::self().meter2speed(speed, val, unit);
+    changed(QObject::tr("Changed speed to %1%2.").arg(val).arg(unit), "://icons/48x48/Time.png");
+}
diff --git a/src/gis/wpt/CGisItemWpt.cpp b/src/gis/wpt/CGisItemWpt.cpp
index 8d6ae97..99d6f57 100644
--- a/src/gis/wpt/CGisItemWpt.cpp
+++ b/src/gis/wpt/CGisItemWpt.cpp
@@ -377,10 +377,10 @@ void CGisItemWpt::edit()
     }
 }
 
-void CGisItemWpt::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, CGisDraw *gis)
+void CGisItemWpt::drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF> &blockedAreas, CGisDraw *gis)
 {
     posScreen = QPointF(wpt.lon * DEG_TO_RAD, wpt.lat * DEG_TO_RAD);
-    if(!viewport.contains(posScreen))
+    if(!isVisible(posScreen, viewport, gis))
     {
         posScreen = NOPOINTF;
         return;
@@ -408,7 +408,7 @@ void CGisItemWpt::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &b
     blockedAreas << QRectF(posScreen - focus, icon.size());
 }
 
-void CGisItemWpt::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, const QFontMetricsF &fm, CGisDraw *gis)
+void CGisItemWpt::drawLabel(QPainter& p, const QPolygonF &viewport, QList<QRectF> &blockedAreas, const QFontMetricsF &fm, CGisDraw *gis)
 {
     if(posScreen == NOPOINTF)
     {
diff --git a/src/gis/wpt/CGisItemWpt.h b/src/gis/wpt/CGisItemWpt.h
index 0a879f5..22e47d9 100644
--- a/src/gis/wpt/CGisItemWpt.h
+++ b/src/gis/wpt/CGisItemWpt.h
@@ -158,8 +158,8 @@ class CGisItemWpt : public IGisItem
         IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
         QPointF getPointCloseBy(const QPoint& ){return posScreen;}
 
-        void drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
-        void drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
+        void drawItem(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis);
+        void drawLabel(QPainter& p, const QPolygonF& viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
         void drawHighlight(QPainter& p);        
         bool isCloseTo(const QPointF& pos);
         bool isGeocache(){return geocache.hasData;}
diff --git a/src/helpers/CHistoryListWidget.cpp b/src/helpers/CHistoryListWidget.cpp
index e269f3f..99482ac 100644
--- a/src/helpers/CHistoryListWidget.cpp
+++ b/src/helpers/CHistoryListWidget.cpp
@@ -24,6 +24,8 @@
 CHistoryListWidget::CHistoryListWidget(QWidget *parent)
     : QListWidget(parent)
 {
+
+    setIconSize(QSize(32,32));
     setContextMenuPolicy(Qt::CustomContextMenu);
     connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(slotSelectionChanged()));
     connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));
diff --git a/src/icons/32x32/Apply.png b/src/icons/32x32/Apply.png
new file mode 100644
index 0000000..6316482
Binary files /dev/null and b/src/icons/32x32/Apply.png differ
diff --git a/src/icons/32x32/Time.png b/src/icons/32x32/Time.png
new file mode 100644
index 0000000..fdeac6c
Binary files /dev/null and b/src/icons/32x32/Time.png differ
diff --git a/src/icons/48x48/Apply.png b/src/icons/48x48/Apply.png
new file mode 100644
index 0000000..11cbe09
Binary files /dev/null and b/src/icons/48x48/Apply.png differ
diff --git a/src/icons/48x48/Time.png b/src/icons/48x48/Time.png
new file mode 100644
index 0000000..184ab3a
Binary files /dev/null and b/src/icons/48x48/Time.png differ
diff --git a/src/icons/Apply.svg b/src/icons/Apply.svg
new file mode 100644
index 0000000..c2518f2
--- /dev/null
+++ b/src/icons/Apply.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3020"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="Apply.svg">
+  <defs
+     id="defs3022" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="8.3636364"
+     inkscape:cy="32"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="992"
+     inkscape:window-x="-4"
+     inkscape:window-y="-1"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3025">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       y="11.454543"
+       x="11.625697"
+       height="40"
+       width="37.47588"
+       id="rect4156-1"
+       style="fill:none;stroke:#000080;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:#000080;stroke:#000000;stroke-width:1.13124371;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 31.10239,12.202208 -2.157429,0.07067 -0.636623,2.367451 0,0.282681 0.318322,2.014099 -3.006253,0.742037 -0.671982,-1.94343 -0.106001,-0.212008 -1.697647,-1.802091 -1.909847,0.91871 0.353661,2.473459 0.141401,0.21201 1.061043,1.73142 -2.440369,1.908095 -1.379344,-1.484074 -0.212263,-0.176677 -2.298898,-0.954048 -1.379335,1.625416 1.379335,2.120103 0.176822,0.141333 1.697646,1.130724 -1.450074,2.685472 -1.874481,-0.742035 -0.247576,-0.07069 -2.440365,0.07069 -0.636619,2.049434  [...]
+       id="path6034"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/src/icons/Time.svg b/src/icons/Time.svg
new file mode 100644
index 0000000..2d8fd33
--- /dev/null
+++ b/src/icons/Time.svg
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3376"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="Time.svg">
+  <defs
+     id="defs3378" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="-12.727273"
+     inkscape:cy="32"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="992"
+     inkscape:window-x="-4"
+     inkscape:window-y="-1"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3381">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g6456"
+       transform="translate(-400.67421,-84.079419)"
+       inkscape:export-filename="/home/oeichler/Code/android/QLandkarteM/QLandkarteM/icons/32x32/tripcomputer.png"
+       inkscape:export-xdpi="82.285713"
+       inkscape:export-ydpi="82.285713">
+      <rect
+         y="95.48851"
+         x="412.62875"
+         height="35"
+         width="35"
+         id="rect6452"
+         style="fill:none;stroke:none" />
+      <g
+         transform="matrix(0.75505834,0,0,0.74601516,60.127617,30.809648)"
+         id="g6441">
+        <g
+           id="g6433">
+          <path
+             inkscape:connector-curvature="0"
+             id="path6381"
+             d="m 490.01085,93.291991 c -2.96115,0.0029 -5.95261,0.700424 -8.75,2.15625 -9.32986,4.855459 -12.98035,16.357359 -8.125,25.687479 4.85535,9.33012 16.35764,12.94923 25.6875,8.09375 9.32986,-4.85548 12.9491,-16.35738 8.09375,-25.6875 l -0.53125,-0.9375 c -3.55212,-5.959566 -9.86047,-9.318767 -16.375,-9.312479 z m 0,4.78125 c 4.8859,-0.0047 9.61716,2.499039 12.28125,6.968729 l 0.40625,0.71875 c 3.64151,6.99759 0.9349,15.60839 -6.0625,19.25 -6.9974,3.64161 -15.63974,0.93509 -19. [...]
+             style="fill:#000080;fill-opacity:1;stroke:#000000;stroke-width:1.90441298;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+          <g
+             id="g6427">
+            <g
+               id="g6418"
+               transform="translate(-1.0205058,-1.0615171)">
+              <path
+                 inkscape:connector-curvature="0"
+                 id="path6404"
+                 d="m 490.93972,103.02317 0,11.1925"
+                 style="fill:#000080;stroke:#000080;stroke-width:2.96420193;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+              <path
+                 inkscape:connector-curvature="0"
+                 id="path6406"
+                 d="m 498.55553,106.75401 -7.61581,7.46166"
+                 style="fill:#000080;stroke:#000080;stroke-width:2.96420193;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+              <path
+                 transform="matrix(0.57111003,0,0,0.55956543,198.69517,29.405716)"
+                 sodipodi:open="true"
+                 sodipodi:end="12.02886"
+                 sodipodi:start="5.8033439"
+                 d="m 514.71767,148.70809 c 0.63739,1.22478 0.16121,2.73437 -1.06357,3.37176 -1.22479,0.63739 -2.73438,0.16121 -3.37177,-1.06357 -0.63739,-1.22479 -0.16121,-2.73438 1.06357,-3.37177 1.17514,-0.61155 2.6233,-0.20026 3.30156,0.93767"
+                 sodipodi:ry="2.5"
+                 sodipodi:rx="2.5"
+                 sodipodi:cy="149.86218"
+                 sodipodi:cx="512.5"
+                 id="path6408"
+                 style="fill:#000080;fill-opacity:1;stroke:#000080;stroke-width:5.24351454;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+                 sodipodi:type="arc" />
+            </g>
+          </g>
+        </g>
+        <path
+           sodipodi:type="arc"
+           style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.43510604;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path6423"
+           sodipodi:cx="440"
+           sodipodi:cy="127.36218"
+           sodipodi:rx="5"
+           sodipodi:ry="5"
+           d="m 444.43534,125.05399 c 1.27478,2.44957 0.32242,5.46875 -2.12715,6.74353 -2.44957,1.27478 -5.46875,0.32243 -6.74353,-2.12714 -1.27478,-2.44958 -0.32242,-5.46876 2.12715,-6.74354 2.35027,-1.2231 5.24659,-0.40052 6.60312,1.87535"
+           sodipodi:start="5.8033439"
+           sodipodi:end="12.02886"
+           sodipodi:open="true"
+           transform="matrix(0.93012713,0,0,0.5220231,80.773929,23.326855)" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:2.49030304;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 476.24851,132.36218 27.56271,0"
+           id="path6425"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <rect
+       style="fill:none;stroke:none"
+       id="rect3467"
+       width="40"
+       height="40"
+       x="11.954544"
+       y="11.409091" />
+  </g>
+</svg>
diff --git a/src/locale/qmapshack_cs.ts b/src/locale/qmapshack_cs.ts
index 0b6777a..54dcbd0 100644
--- a/src/locale/qmapshack_cs.ts
+++ b/src/locale/qmapshack_cs.ts
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.0" language="cs_CZ">
+<TS version="2.1" language="cs_CZ">
 <context>
     <name>CCanvas</name>
     <message>
@@ -36,6 +36,14 @@
     </message>
 </context>
 <context>
+    <name>CDemPropSetup</name>
+    <message>
+        <location filename="../dem/CDemPropSetup.cpp" line="187"/>
+        <source><b>Grade %1</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CDemVRT</name>
     <message>
         <location filename="../dem/CDemVRT.cpp" line="44"/>
@@ -137,12 +145,32 @@
 <context>
     <name>CDetailsTrk</name>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="154"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="163"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="166"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="172"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="191"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="193"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="56"/>
+        <source>Reduce visible track points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="66"/>
+        <source>Change elevation of track points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="79"/>
+        <source>Change timestamp of track points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="92"/>
+        <source>Cut track into pieces</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="206"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="215"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="218"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="224"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="243"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="245"/>
         <source>%1 %2</source>
         <translation>%1 %2</translation>
     </message>
@@ -378,6 +406,19 @@
     </message>
 </context>
 <context>
+    <name>CGisWidget</name>
+    <message>
+        <location filename="../gis/CGisWidget.cpp" line="349"/>
+        <source>Cut Track...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/CGisWidget.cpp" line="349"/>
+        <source>Do you want to delete the original track?</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CGrid</name>
     <message>
         <source>[Grid: %1] </source>
@@ -397,7 +438,7 @@
 <context>
     <name>CHistoryListWidget</name>
     <message>
-        <location filename="../helpers/CHistoryListWidget.cpp" line="32"/>
+        <location filename="../helpers/CHistoryListWidget.cpp" line="34"/>
         <source>Cut history</source>
         <translation>Vyjmout historii</translation>
     </message>
@@ -1674,7 +1715,7 @@ není platným vymezením soustavy souřadnic
         <source>This software is licensed under GPL3 or any later version</source>
         <translation>Tento program je licencován pod GPL3 nebo kteroukoli pozdější verzí</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../IAbout.ui" line="145"/>
         <source>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</source>
         <translation>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</translation>
@@ -1741,36 +1782,56 @@ není platným vymezením soustavy souřadnic
         <translation>Formulář</translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="20"/>
+        <location filename="../dem/IDemPropSetup.ui" line="35"/>
         <source><html><head/><body><p>Change opacity of map</p></body></html></source>
         <translation><html><head/><body><p>Změnit neprůhlednost mapy</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="32"/>
+        <location filename="../dem/IDemPropSetup.ui" line="50"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Klepněte pro použití nynějšího měřítka jako nejmenšího měřítka pro zobrazení mapy.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="35"/>
-        <location filename="../dem/IDemPropSetup.ui" line="72"/>
+        <location filename="../dem/IDemPropSetup.ui" line="53"/>
+        <location filename="../dem/IDemPropSetup.ui" line="90"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="56"/>
+        <location filename="../dem/IDemPropSetup.ui" line="74"/>
         <source><html><head/><body><p>Control the range of scale the map is displayed. Use the two buttons left and right to define the actual scale as either minimum or maximum scale.</p></body></html></source>
         <translation><html><head/><body><p>Je zobrazeno ovládání rozmezí měřítka mapy. Použijte tlačítka vlevo a vpravo pro stanovení skutečného měřítka jako buď nejmenšího nebo největšího měřítka.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="69"/>
+        <location filename="../dem/IDemPropSetup.ui" line="87"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Klepněte pro použití nynějšího měřítka jako nejmenšího měřítka pro zobrazení mapy.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="97"/>
+        <location filename="../dem/IDemPropSetup.ui" line="124"/>
         <source>Hillshading</source>
         <translation>Stínování kopců</translation>
     </message>
+    <message>
+        <location filename="../dem/IDemPropSetup.ui" line="150"/>
+        <source>Slope </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../dem/IDemPropSetup.ui" line="192"/>
+        <location filename="../dem/IDemPropSetup.ui" line="199"/>
+        <location filename="../dem/IDemPropSetup.ui" line="206"/>
+        <location filename="../dem/IDemPropSetup.ui" line="213"/>
+        <location filename="../dem/IDemPropSetup.ui" line="232"/>
+        <location filename="../dem/IDemPropSetup.ui" line="251"/>
+        <location filename="../dem/IDemPropSetup.ui" line="270"/>
+        <location filename="../dem/IDemPropSetup.ui" line="277"/>
+        <location filename="../dem/IDemPropSetup.ui" line="284"/>
+        <location filename="../dem/IDemPropSetup.ui" line="303"/>
+        <location filename="../dem/IDemPropSetup.ui" line="310"/>
+        <source>TextLabel</source>
+        <translation type="unfinished">Textový štítek</translation>
+    </message>
 </context>
 <context>
     <name>IDemsList</name>
@@ -2015,6 +2076,11 @@ není platným vymezením soustavy souřadnic
     </message>
     <message>
         <location filename="../gis/trk/IDetailsTrk.ui" line="399"/>
+        <source>Filter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="436"/>
         <source>Hist.</source>
         <translation>Hist.</translation>
     </message>
@@ -2101,6 +2167,225 @@ není platným vymezením soustavy souřadnic
     </message>
 </context>
 <context>
+    <name>IFilterDelete</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="51"/>
+        <source><b>Remove Track Points</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="63"/>
+        <source>Remove all hidden track points permanently.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="70"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterDouglasPeuker</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="45"/>
+        <source><b>Hide Points (Douglas Peuker)</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="57"/>
+        <source>Hide track points if the distance to a line between neighboring points is less than</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="70"/>
+        <source>m</source>
+        <translation type="unfinished">m</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="93"/>
+        <source>Apply filter now.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="96"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterMedian</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="51"/>
+        <source><b>Smooth Profile (Median Method)</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="63"/>
+        <source>Smooth deviation of the track points elevation with a Median filter of size </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="76"/>
+        <source>points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="105"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterNewDate</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="35"/>
+        <source><b>Change Time</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="44"/>
+        <source>Change start of track to </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="71"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterObscureDate</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="45"/>
+        <source><b>Obscure Timestamps</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="54"/>
+        <source>Increase timestamp by</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="61"/>
+        <source> sec.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="68"/>
+        <source>with each track point. 0 sec. will remove timestamps.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="88"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterOffsetElevation</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="51"/>
+        <source><b>Offset Elevation</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="69"/>
+        <source>Add offset of</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="95"/>
+        <source>to track points elevation.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="115"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterReplaceElevation</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="51"/>
+        <source><b>Replace Elevation Data</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="63"/>
+        <source>Replace elevation of track points with the values from loaded DEM files.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="70"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterSpeed</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="35"/>
+        <source><b>Change Speed</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="44"/>
+        <source>Set speed to </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="51"/>
+        <source> km/h</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="102"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
     <name>IGisWidget</name>
     <message>
         <location filename="../gis/IGisWidget.ui" line="14"/>
@@ -2528,54 +2813,54 @@ není platným vymezením soustavy souřadnic
         <translation><html><head/><body><p>Změnit neprůhlednost mapy</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="47"/>
+        <location filename="../map/IMapPropSetup.ui" line="50"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Klepněte pro použití nynějšího měřítka jako nejmenšího měřítka pro zobrazení mapy.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="50"/>
-        <location filename="../map/IMapPropSetup.ui" line="87"/>
-        <location filename="../map/IMapPropSetup.ui" line="194"/>
+        <location filename="../map/IMapPropSetup.ui" line="53"/>
+        <location filename="../map/IMapPropSetup.ui" line="90"/>
+        <location filename="../map/IMapPropSetup.ui" line="200"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="71"/>
+        <location filename="../map/IMapPropSetup.ui" line="74"/>
         <source><html><head/><body><p>Control the range of scale the map is displayed. Use the two buttons left and right to define the actual scale as either minimum or maximum scale.</p></body></html></source>
         <translation><html><head/><body><p>Je zobrazeno ovládání rozmezí měřítka mapy. Použijte tlačítka vlevo a vpravo pro stanovení skutečného měřítka jako buď nejmenšího nebo největšího měřítka.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="84"/>
+        <location filename="../map/IMapPropSetup.ui" line="87"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Klepněte pro použití nynějšího měřítka jako nejmenšího měřítka pro zobrazení mapy.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="134"/>
+        <location filename="../map/IMapPropSetup.ui" line="137"/>
         <source>Areas</source>
         <translation>Oblasti</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="141"/>
+        <location filename="../map/IMapPropSetup.ui" line="144"/>
         <source>Lines</source>
         <translation>Čáry</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="148"/>
+        <location filename="../map/IMapPropSetup.ui" line="151"/>
         <source>Points</source>
         <translation>Body</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="184"/>
+        <location filename="../map/IMapPropSetup.ui" line="190"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="208"/>
+        <location filename="../map/IMapPropSetup.ui" line="220"/>
         <source>Cache Size (MB)</source>
         <translation>Velikost vyrovnávací paměti (MB)</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="228"/>
+        <location filename="../map/IMapPropSetup.ui" line="240"/>
         <source>Expiration (Days)</source>
         <translation>Datum vypršení (dny)</translation>
     </message>
@@ -2720,7 +3005,7 @@ nebo
         <source>m</source>
         <translation>m</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="76"/>
         <source>°</source>
         <translation>°</translation>
@@ -3536,106 +3821,106 @@ Filename: %1</source>
     <message>
         <location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
         <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
-        <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
+        <location filename="../gis/qms/CQmsProject.cpp" line="145"/>
         <source>Failed to open...</source>
         <translation>Nepodařilo se otevřít...</translation>
     </message>
     <message>
         <location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
         <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
-        <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
+        <location filename="../gis/qms/CQmsProject.cpp" line="145"/>
         <source>Failed to open %1</source>
         <translation>Nepodařilo se otevřít %1</translation>
     </message>
     <message>
         <location filename="../gis/db/CDBProject.cpp" line="125"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="151"/>
-        <location filename="../gis/qms/CQmsProject.cpp" line="91"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="155"/>
+        <location filename="../gis/qms/CQmsProject.cpp" line="95"/>
         <source>Save GIS data to...</source>
         <translation>Uložit data GIS do...</translation>
     </message>
     <message>
-        <location filename="../gis/db/CDBProject.cpp" line="154"/>
+        <location filename="../gis/db/CDBProject.cpp" line="157"/>
         <source>Save ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/db/CDBProject.cpp" line="154"/>
+        <location filename="../gis/db/CDBProject.cpp" line="157"/>
         <source>Abort save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="222"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="231"/>
         <source>File exists ...</source>
         <translation>Soubor existuje...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="223"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="232"/>
         <source>The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file.  Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b></source>
         <translation>Soubor existuje a nebyl vytvořen programem QMapShack. Pokud stisknete Ano, budou všechna data v tomto souboru ztracena. I když by tento soubor obsahoval data GPX a byl nahrán programem QMapShack, QMapShack nemusí být schopen nahrát a uložit všechny prvky tohoto souboru.  Tyto prvky budou ztraceny. Doporučuje se použít jiný soubor. <b>Opravdu chcete soubor přepsat?</b></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="289"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="299"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="298"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="308"/>
         <source>Saveing GIS data failed...</source>
         <translation>Nepodařilo se uložit data GIS...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="289"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="298"/>
         <source>Failed to create file '%1'</source>
         <translation>Nepodařilo se vytvořit soubor '%1'</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="299"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="308"/>
         <source>Failed to write file '%1'</source>
         <translation>Nepodařilo se zapsat soubor '%1'</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="285"/>
+        <location filename="../gis/IGisItem.cpp" line="286"/>
         <source>Initial version.</source>
         <translation>Počáteční verze.</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="369"/>
+        <location filename="../gis/IGisItem.cpp" line="370"/>
         <source>This element is probably read-only because it was not created within QMapShack. Usually you should not want to change imported data. But if you think that is ok press'Ok'.</source>
         <translation>Tento prvek je pravděpodobně pouze pro čtení, protože nebyl vytvořen v programu QMapShack. Obvykle nemáte zájem měnit zavedená data. Ale pokud si myslíte, že je to tentokrát na místě, stiskněte OK.</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="370"/>
+        <location filename="../gis/IGisItem.cpp" line="371"/>
         <source>Read Only Mode...</source>
         <translation>Režim pouze pro čtení...</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="559"/>
+        <location filename="../gis/IGisItem.cpp" line="560"/>
         <source><h4>Comment:</h4></source>
         <translation type="unfinished"><h4>Poznámka:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="562"/>
+        <location filename="../gis/IGisItem.cpp" line="563"/>
         <source><p>--- no comment ---</p></source>
         <translation type="unfinished"><p>--- žádná poznámka ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="569"/>
-        <location filename="../gis/IGisItem.cpp" line="599"/>
+        <location filename="../gis/IGisItem.cpp" line="570"/>
+        <location filename="../gis/IGisItem.cpp" line="600"/>
         <source><h4>Description:</h4></source>
         <translation type="unfinished"><h4>Popis:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="572"/>
-        <location filename="../gis/IGisItem.cpp" line="602"/>
+        <location filename="../gis/IGisItem.cpp" line="573"/>
+        <location filename="../gis/IGisItem.cpp" line="603"/>
         <source><p>--- no description ---</p></source>
         <translation type="unfinished"><p>--- žádný popis ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="579"/>
-        <location filename="../gis/IGisItem.cpp" line="609"/>
+        <location filename="../gis/IGisItem.cpp" line="580"/>
+        <location filename="../gis/IGisItem.cpp" line="610"/>
         <source><h4>Links:</h4></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="582"/>
-        <location filename="../gis/IGisItem.cpp" line="612"/>
+        <location filename="../gis/IGisItem.cpp" line="583"/>
+        <location filename="../gis/IGisItem.cpp" line="613"/>
         <source><p>--- no links ---</p></source>
         <translation type="unfinished"></translation>
     </message>
@@ -3691,12 +3976,12 @@ Filename: %1</source>
         <translation> sklon: %1%3 (%2%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="956"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="973"/>
         <source>Hide points.</source>
         <translation>Skrýt body.</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="990"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1007"/>
         <source>Show points.</source>
         <translation>Ukázat body.</translation>
     </message>
@@ -3828,14 +4113,14 @@ Filename: %1</source>
     </message>
     <message>
         <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="505"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1295"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1312"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="347"/>
         <source>Changed links</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="517"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1307"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1324"/>
         <source>Changed color</source>
         <translation>Změněná barva</translation>
     </message>
@@ -3850,17 +4135,17 @@ Filename: %1</source>
         <translation>Blízkost: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1277"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1294"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="298"/>
         <source>Changed name</source>
         <translation>Změněný název</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="828"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="849"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="899"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1032"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="179"/>
         <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
@@ -3893,13 +4178,13 @@ Filename: %1</source>
         <translation>Změněná ikona</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1283"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1300"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="335"/>
         <source>Changed comment</source>
         <translation>Změněná poznámka</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1306"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="341"/>
         <source>Changed description</source>
         <translation>Změněný popis</translation>
@@ -3936,11 +4221,11 @@ Filename: %1</source>
         <translation>Toto je souborový typ s neznámým druhem čáry. Nahlašte to, prosím!</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="828"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="849"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="899"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1032"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
         <source>Enter new track name.</source>
         <translation>Zadat název nové stopy.</translation>
@@ -3951,7 +4236,7 @@ Filename: %1</source>
         <translation>Zadat název nové oblasti.</translation>
     </message>
     <message>
-        <location filename="../gis/db/CDBFolderDatabase.cpp" line="27"/>
+        <location filename="../gis/db/CDBFolderDatabase.cpp" line="28"/>
         <location filename="../gis/db/CDBFolderLostFound.cpp" line="30"/>
         <source>All your data grouped by folders.</source>
         <translation type="unfinished"></translation>
@@ -3996,5 +4281,50 @@ Filename: %1</source>
         <source>Number of trackpoints is not equal the number of shadow data trackpoints.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="96"/>
+        <source>Hide points by Douglas Peuker algorithm (%1%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="122"/>
+        <source>Permanently removed all hidden track points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="173"/>
+        <source>Smoothed profile with a Median filter of size %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="210"/>
+        <source>Replaced elevation data with data from DEM files.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="234"/>
+        <source>Offset elevation data by %1%2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="254"/>
+        <source>Changed start of track to %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="273"/>
+        <source>Remove timestamps.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="296"/>
+        <source>Set artifical timestamps with delta of %1 sec.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="330"/>
+        <source>Changed speed to %1%2.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
diff --git a/src/locale/qmapshack_de.ts b/src/locale/qmapshack_de.ts
index 7d75f5d..7e6377d 100644
--- a/src/locale/qmapshack_de.ts
+++ b/src/locale/qmapshack_de.ts
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.0" language="de_DE">
+<TS version="2.1" language="de_DE">
 <context>
     <name>CCanvas</name>
     <message>
@@ -36,6 +36,14 @@
     </message>
 </context>
 <context>
+    <name>CDemPropSetup</name>
+    <message>
+        <location filename="../dem/CDemPropSetup.cpp" line="187"/>
+        <source><b>Grade %1</b></source>
+        <translation><b>Stufe %1</b></translation>
+    </message>
+</context>
+<context>
     <name>CDemVRT</name>
     <message>
         <location filename="../dem/CDemVRT.cpp" line="44"/>
@@ -145,12 +153,32 @@
 <context>
     <name>CDetailsTrk</name>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="154"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="163"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="166"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="172"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="191"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="193"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="56"/>
+        <source>Reduce visible track points</source>
+        <translation>Die Anzahl der sichtbaren Trackpunkte reduzieren</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="66"/>
+        <source>Change elevation of track points</source>
+        <translation>Die Höheninformation der Trackpunkte ändern</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="79"/>
+        <source>Change timestamp of track points</source>
+        <translation>Die Zeitmarken der Trackpunkte ändern</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="92"/>
+        <source>Cut track into pieces</source>
+        <translation>Den Track in Stücke zerschneiden</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="206"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="215"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="218"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="224"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="243"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="245"/>
         <source>%1 %2</source>
         <translation></translation>
     </message>
@@ -418,6 +446,19 @@
     </message>
 </context>
 <context>
+    <name>CGisWidget</name>
+    <message>
+        <location filename="../gis/CGisWidget.cpp" line="349"/>
+        <source>Cut Track...</source>
+        <translation>Track zerschneiden...</translation>
+    </message>
+    <message>
+        <location filename="../gis/CGisWidget.cpp" line="349"/>
+        <source>Do you want to delete the original track?</source>
+        <translation>Wollen sie den originalen Track löschen?</translation>
+    </message>
+</context>
+<context>
     <name>CGrid</name>
     <message>
         <source>[Grid: %1] </source>
@@ -437,7 +478,7 @@
 <context>
     <name>CHistoryListWidget</name>
     <message>
-        <location filename="../helpers/CHistoryListWidget.cpp" line="32"/>
+        <location filename="../helpers/CHistoryListWidget.cpp" line="34"/>
         <source>Cut history</source>
         <translation>Historie kürzen</translation>
     </message>
@@ -1757,7 +1798,7 @@ ist keine gültige Koordinatensystemdefinition:
         <source>This software is licensed under GPL3 or any later version</source>
         <translation>Diese Software steht unter der GPL3 Lizenz (oder spätere Versionen)</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../IAbout.ui" line="145"/>
         <source>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</source>
         <translation></translation>
@@ -1824,36 +1865,56 @@ ist keine gültige Koordinatensystemdefinition:
         <translation></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="20"/>
+        <location filename="../dem/IDemPropSetup.ui" line="35"/>
         <source><html><head/><body><p>Change opacity of map</p></body></html></source>
         <translation><html><head/><body><p>Ändert die Transparenz der Karte</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="32"/>
+        <location filename="../dem/IDemPropSetup.ui" line="50"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Klicken, um die aktuelle Skalierung als minimale Skalierung zu benutzen.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="35"/>
-        <location filename="../dem/IDemPropSetup.ui" line="72"/>
+        <location filename="../dem/IDemPropSetup.ui" line="53"/>
+        <location filename="../dem/IDemPropSetup.ui" line="90"/>
         <source>...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="56"/>
+        <location filename="../dem/IDemPropSetup.ui" line="74"/>
         <source><html><head/><body><p>Control the range of scale the map is displayed. Use the two buttons left and right to define the actual scale as either minimum or maximum scale.</p></body></html></source>
         <translation><html><head/><body><p>Stellt den Skalierungsbereich ein, in dem die Karte sichtbar ist. Benutzen Sie die beiden Knöpfe links und rechts um die minimale und maximale Skalierung einzustellen.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="69"/>
+        <location filename="../dem/IDemPropSetup.ui" line="87"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Klicken um die aktuelle Skalierung als maximale Skalierung zu benutzen.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="97"/>
+        <location filename="../dem/IDemPropSetup.ui" line="124"/>
         <source>Hillshading</source>
         <translation>Schummerung</translation>
     </message>
+    <message>
+        <location filename="../dem/IDemPropSetup.ui" line="150"/>
+        <source>Slope </source>
+        <translation>Hangneigung</translation>
+    </message>
+    <message>
+        <location filename="../dem/IDemPropSetup.ui" line="192"/>
+        <location filename="../dem/IDemPropSetup.ui" line="199"/>
+        <location filename="../dem/IDemPropSetup.ui" line="206"/>
+        <location filename="../dem/IDemPropSetup.ui" line="213"/>
+        <location filename="../dem/IDemPropSetup.ui" line="232"/>
+        <location filename="../dem/IDemPropSetup.ui" line="251"/>
+        <location filename="../dem/IDemPropSetup.ui" line="270"/>
+        <location filename="../dem/IDemPropSetup.ui" line="277"/>
+        <location filename="../dem/IDemPropSetup.ui" line="284"/>
+        <location filename="../dem/IDemPropSetup.ui" line="303"/>
+        <location filename="../dem/IDemPropSetup.ui" line="310"/>
+        <source>TextLabel</source>
+        <translation>Bezeichnung</translation>
+    </message>
 </context>
 <context>
     <name>IDemsList</name>
@@ -2097,6 +2158,11 @@ ist keine gültige Koordinatensystemdefinition:
     </message>
     <message>
         <location filename="../gis/trk/IDetailsTrk.ui" line="399"/>
+        <source>Filter</source>
+        <translation>Filter</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="436"/>
         <source>Hist.</source>
         <translation>Hist.</translation>
     </message>
@@ -2195,6 +2261,225 @@ ist keine gültige Koordinatensystemdefinition:
     </message>
 </context>
 <context>
+    <name>IFilterDelete</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="51"/>
+        <source><b>Remove Track Points</b></source>
+        <translation><b>Trackpunkte entfernen</b></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="63"/>
+        <source>Remove all hidden track points permanently.</source>
+        <translation>Alle versteckten Trackpunkte werden für immer entfernt.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="70"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
+    <name>IFilterDouglasPeuker</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="45"/>
+        <source><b>Hide Points (Douglas Peuker)</b></source>
+        <translation><b>Trackpunkte verstecken (Douglas Peuker)</b></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="57"/>
+        <source>Hide track points if the distance to a line between neighboring points is less than</source>
+        <translation>Trackpunkte werden versteckt, wenn der Abstand zu einer Linien zwischen benachbarten Punkten weniger beträgt als</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="70"/>
+        <source>m</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="93"/>
+        <source>Apply filter now.</source>
+        <translation>Den Filter jetzt anwenden.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="96"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
+    <name>IFilterMedian</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="51"/>
+        <source><b>Smooth Profile (Median Method)</b></source>
+        <translation><b>Profil glätten (Medianmethode) </b></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="63"/>
+        <source>Smooth deviation of the track points elevation with a Median filter of size </source>
+        <translation>Veringeren Sie die Varianz der Trackpunkthöhe mit einem Medianfilter der Länge </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="76"/>
+        <source>points</source>
+        <translation>Punkte</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="105"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
+    <name>IFilterNewDate</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="35"/>
+        <source><b>Change Time</b></source>
+        <translation><b>Zeit ändern</b></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="44"/>
+        <source>Change start of track to </source>
+        <translation>Verändern Sie die Anfangszeit des Tracks auf </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="71"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
+    <name>IFilterObscureDate</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="45"/>
+        <source><b>Obscure Timestamps</b></source>
+        <translation><b>Zeitmarken verschleiern</b></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="54"/>
+        <source>Increase timestamp by</source>
+        <translation>Vergrößern Sie die Zeitmarke um </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="61"/>
+        <source> sec.</source>
+        <translation>Sek.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="68"/>
+        <source>with each track point. 0 sec. will remove timestamps.</source>
+        <translation>für jeden Trackpunkt. 0 Sek. entfernt alle Zeitmarken.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="88"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
+    <name>IFilterOffsetElevation</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="51"/>
+        <source><b>Offset Elevation</b></source>
+        <translation><b>Offset Höhe</b></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="69"/>
+        <source>Add offset of</source>
+        <translation>Fügen Sie einen Offset von </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="95"/>
+        <source>to track points elevation.</source>
+        <translation>zu jeder Trackpunkthöhe hinzu. </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="115"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
+    <name>IFilterReplaceElevation</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="51"/>
+        <source><b>Replace Elevation Data</b></source>
+        <translation><b>Höhendaten ersetzen</b></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="63"/>
+        <source>Replace elevation of track points with the values from loaded DEM files.</source>
+        <translation>Ersetzen Sie die Höhendaten der Trackpunkte mit Daten aus den geladenen DEM Dateien.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="70"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
+    <name>IFilterSpeed</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="35"/>
+        <source><b>Change Speed</b></source>
+        <translation><b>Geschwindigkeit ändern</b></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="44"/>
+        <source>Set speed to </source>
+        <translation>Ändern Sie die Geschwindigkeit auf </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="51"/>
+        <source> km/h</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="102"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
     <name>IGisWidget</name>
     <message>
         <location filename="../gis/IGisWidget.ui" line="14"/>
@@ -2626,54 +2911,54 @@ ist keine gültige Koordinatensystemdefinition:
         <translation><html><head/><body><p>Ändern Sie die Transparenz der Karte</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="47"/>
+        <location filename="../map/IMapPropSetup.ui" line="50"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Klicken um die aktuelle Skalierung als minimale Skalierung zu benutzen.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="50"/>
-        <location filename="../map/IMapPropSetup.ui" line="87"/>
-        <location filename="../map/IMapPropSetup.ui" line="194"/>
+        <location filename="../map/IMapPropSetup.ui" line="53"/>
+        <location filename="../map/IMapPropSetup.ui" line="90"/>
+        <location filename="../map/IMapPropSetup.ui" line="200"/>
         <source>...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="71"/>
+        <location filename="../map/IMapPropSetup.ui" line="74"/>
         <source><html><head/><body><p>Control the range of scale the map is displayed. Use the two buttons left and right to define the actual scale as either minimum or maximum scale.</p></body></html></source>
         <translation><html><head/><body><p>Stellen Sie den Skalierungsbereich ein, in dem die Karte sichtbar ist. Benutzen Sie die beiden Knöpfe links und rechts um die minimale und maximale Skalierung einzustellen.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="84"/>
+        <location filename="../map/IMapPropSetup.ui" line="87"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Klicken um die aktuelle Skalierung als maximale Skalierung zu benutzen.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="134"/>
+        <location filename="../map/IMapPropSetup.ui" line="137"/>
         <source>Areas</source>
         <translation>Flächen</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="141"/>
+        <location filename="../map/IMapPropSetup.ui" line="144"/>
         <source>Lines</source>
         <translation>Linien</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="148"/>
+        <location filename="../map/IMapPropSetup.ui" line="151"/>
         <source>Points</source>
         <translation>Punkte</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="184"/>
+        <location filename="../map/IMapPropSetup.ui" line="190"/>
         <source>-</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="208"/>
+        <location filename="../map/IMapPropSetup.ui" line="220"/>
         <source>Cache Size (MB)</source>
         <translation>Cache (MB)</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="228"/>
+        <location filename="../map/IMapPropSetup.ui" line="240"/>
         <source>Expiration (Days)</source>
         <translation>Verfallzeit (Tage)</translation>
     </message>
@@ -2819,7 +3104,7 @@ sein</translation>
         <source>m</source>
         <translation></translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="76"/>
         <source>°</source>
         <translation></translation>
@@ -3647,57 +3932,57 @@ Dateiname: %1</translation>
     <message>
         <location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
         <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
-        <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
+        <location filename="../gis/qms/CQmsProject.cpp" line="145"/>
         <source>Failed to open...</source>
         <translation>Öffnen fehlgeschlagen...</translation>
     </message>
     <message>
         <location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
         <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
-        <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
+        <location filename="../gis/qms/CQmsProject.cpp" line="145"/>
         <source>Failed to open %1</source>
         <translation>Öffnen fehlgeschlagen: %1</translation>
     </message>
     <message>
         <location filename="../gis/db/CDBProject.cpp" line="125"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="151"/>
-        <location filename="../gis/qms/CQmsProject.cpp" line="91"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="155"/>
+        <location filename="../gis/qms/CQmsProject.cpp" line="95"/>
         <source>Save GIS data to...</source>
         <translation>GIS Daten speichern in...</translation>
     </message>
     <message>
-        <location filename="../gis/db/CDBProject.cpp" line="154"/>
+        <location filename="../gis/db/CDBProject.cpp" line="157"/>
         <source>Save ...</source>
         <translation>Speichern ...</translation>
     </message>
     <message>
-        <location filename="../gis/db/CDBProject.cpp" line="154"/>
+        <location filename="../gis/db/CDBProject.cpp" line="157"/>
         <source>Abort save</source>
         <translation>Speichern abbrechen</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="222"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="231"/>
         <source>File exists ...</source>
         <translation>Datei existiert...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="223"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="232"/>
         <source>The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file.  Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b></source>
         <translation>Diese Datei wurde nicht mit QMapShack erstellt. Wenn Sie 'Ja' drücken werden alle Daten dieser Datei gelöscht. Selbst wenn diese Datei GPX Daten enthält und mit QMapShack geladen wurde, können nicht alle Elemente dieser Datei durch QMapShack geladen und gespeichert werden. Diese Elemente sind verloren. Ich empfehle die Nutzung einer anderen Datei. <b>Wollen Sie die Datei wirklich überschreiben?</b></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="289"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="298"/>
         <source>Failed to create file '%1'</source>
         <translation>Datei %1' konnte nicht erstellt werden</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="289"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="299"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="298"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="308"/>
         <source>Saveing GIS data failed...</source>
         <translation>Speichern der GIS Daten fehlgeschlagen...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="299"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="308"/>
         <source>Failed to write file '%1'</source>
         <translation>Datei %1' konnte nicht gespeichert werden</translation>
     </message>
@@ -3762,12 +4047,12 @@ Dateiname: %1</translation>
         <translation type="obsolete"> Neigung: %1° (%2%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="956"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="973"/>
         <source>Hide points.</source>
         <translation>Punkte ausblenden.</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="990"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1007"/>
         <source>Show points.</source>
         <translation>Punkte anzeigen.</translation>
     </message>
@@ -3890,23 +4175,23 @@ Dateiname: %1</translation>
     </message>
     <message>
         <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="505"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1295"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1312"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="347"/>
         <source>Changed links</source>
         <translation>Geänderte Verknüpfungen</translation>
     </message>
     <message>
         <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="517"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1307"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1324"/>
         <source>Changed color</source>
         <translation>Farbe geändert</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="828"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="849"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="899"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1032"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="179"/>
         <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
@@ -3929,7 +4214,7 @@ Dateiname: %1</translation>
         <translation>Abstand: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1277"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1294"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="298"/>
         <source>Changed name</source>
         <translation>Name geändert</translation>
@@ -3955,13 +4240,13 @@ Dateiname: %1</translation>
         <translation>Symbol geändert</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1283"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1300"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="335"/>
         <source>Changed comment</source>
         <translation>Kommentar geändert</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1306"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="341"/>
         <source>Changed description</source>
         <translation>Beschreibung geändert</translation>
@@ -3998,60 +4283,60 @@ Dateiname: %1</translation>
         <translation>Dieser Dateityp hat eine unbekannte Polyline Kodierung. Bitte mitteilen!</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="285"/>
+        <location filename="../gis/IGisItem.cpp" line="286"/>
         <source>Initial version.</source>
         <translation>Erstversion.</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="369"/>
+        <location filename="../gis/IGisItem.cpp" line="370"/>
         <source>This element is probably read-only because it was not created within QMapShack. Usually you should not want to change imported data. But if you think that is ok press'Ok'.</source>
         <translation>Diese Element ist vermutlich schreibgeschützt, da nicht mit QMapShack erstellt. Normalerweise sollten importierte Daten nicht geändert werden. Wenn doch, drücken Sie 'OK'.</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="370"/>
+        <location filename="../gis/IGisItem.cpp" line="371"/>
         <source>Read Only Mode...</source>
         <translation>Schreibgeschützt...</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="559"/>
+        <location filename="../gis/IGisItem.cpp" line="560"/>
         <source><h4>Comment:</h4></source>
         <translation><h4>Kommentar:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="562"/>
+        <location filename="../gis/IGisItem.cpp" line="563"/>
         <source><p>--- no comment ---</p></source>
         <translation><p>--- kein Kommentar ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="569"/>
-        <location filename="../gis/IGisItem.cpp" line="599"/>
+        <location filename="../gis/IGisItem.cpp" line="570"/>
+        <location filename="../gis/IGisItem.cpp" line="600"/>
         <source><h4>Description:</h4></source>
         <translation><h4>Beschreibung:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="572"/>
-        <location filename="../gis/IGisItem.cpp" line="602"/>
+        <location filename="../gis/IGisItem.cpp" line="573"/>
+        <location filename="../gis/IGisItem.cpp" line="603"/>
         <source><p>--- no description ---</p></source>
         <translation><p>--- keine Beschreibung ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="579"/>
-        <location filename="../gis/IGisItem.cpp" line="609"/>
+        <location filename="../gis/IGisItem.cpp" line="580"/>
+        <location filename="../gis/IGisItem.cpp" line="610"/>
         <source><h4>Links:</h4></source>
         <translation><h4>Verknüpfungen:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="582"/>
-        <location filename="../gis/IGisItem.cpp" line="612"/>
+        <location filename="../gis/IGisItem.cpp" line="583"/>
+        <location filename="../gis/IGisItem.cpp" line="613"/>
         <source><p>--- no links ---</p></source>
         <translation><p>--- keine Verknüpfungen ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="828"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="849"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="899"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1032"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
         <source>Enter new track name.</source>
         <translation>Name eingeben.</translation>
@@ -4062,7 +4347,7 @@ Dateiname: %1</translation>
         <translation>Name eingeben.</translation>
     </message>
     <message>
-        <location filename="../gis/db/CDBFolderDatabase.cpp" line="27"/>
+        <location filename="../gis/db/CDBFolderDatabase.cpp" line="28"/>
         <location filename="../gis/db/CDBFolderLostFound.cpp" line="30"/>
         <source>All your data grouped by folders.</source>
         <translation>Alle Daten nach Ordnern gruppiert.</translation>
@@ -4111,5 +4396,50 @@ Dateiname: %1</translation>
         <source>Number of trackpoints is not equal the number of shadow data trackpoints.</source>
         <translation>Anzahl der Trackpunkte entspricht nicht der Anzahl der ausgeblendeten Trackpunkte.</translation>
     </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="96"/>
+        <source>Hide points by Douglas Peuker algorithm (%1%2)</source>
+        <translation>Punkte mit Hilfe des Douglas Peuker Algorithmus versteckt (%1%2)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="122"/>
+        <source>Permanently removed all hidden track points</source>
+        <translation>Alle versteckten Trackpunkte für immer gelöscht</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="173"/>
+        <source>Smoothed profile with a Median filter of size %1</source>
+        <translation>Das Profil mit einem Medianfilter der Länge %1 geglättet</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="210"/>
+        <source>Replaced elevation data with data from DEM files.</source>
+        <translation>Höhendaten durch Daten aus den DEM Dateien ersetzt</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="234"/>
+        <source>Offset elevation data by %1%2.</source>
+        <translation>Höhendaten um %1%2 verschoben.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="254"/>
+        <source>Changed start of track to %1.</source>
+        <translation>Trackanfang auf %1 verschoben.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="273"/>
+        <source>Remove timestamps.</source>
+        <translation>Zeitmarken entfernt.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="296"/>
+        <source>Set artifical timestamps with delta of %1 sec.</source>
+        <translation>Künstliche Zeitmarken mit einem Abstand von %1 Sek. gesetzt.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="330"/>
+        <source>Changed speed to %1%2.</source>
+        <translation>Die Geschwindigkeit auf %1%2 gesetzt.</translation>
+    </message>
 </context>
 </TS>
diff --git a/src/locale/qmapshack_es.ts b/src/locale/qmapshack_es.ts
index 1e8dda3..f64b41a 100644
--- a/src/locale/qmapshack_es.ts
+++ b/src/locale/qmapshack_es.ts
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.0" language="es_ES">
+<TS version="2.1" language="es_ES">
 <context>
     <name>CCanvas</name>
     <message>
@@ -36,6 +36,14 @@
     </message>
 </context>
 <context>
+    <name>CDemPropSetup</name>
+    <message>
+        <location filename="../dem/CDemPropSetup.cpp" line="187"/>
+        <source><b>Grade %1</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CDemVRT</name>
     <message>
         <location filename="../dem/CDemVRT.cpp" line="44"/>
@@ -137,12 +145,32 @@
 <context>
     <name>CDetailsTrk</name>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="154"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="163"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="166"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="172"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="191"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="193"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="56"/>
+        <source>Reduce visible track points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="66"/>
+        <source>Change elevation of track points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="79"/>
+        <source>Change timestamp of track points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="92"/>
+        <source>Cut track into pieces</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="206"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="215"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="218"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="224"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="243"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="245"/>
         <source>%1 %2</source>
         <translation></translation>
     </message>
@@ -374,6 +402,19 @@
     </message>
 </context>
 <context>
+    <name>CGisWidget</name>
+    <message>
+        <location filename="../gis/CGisWidget.cpp" line="349"/>
+        <source>Cut Track...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/CGisWidget.cpp" line="349"/>
+        <source>Do you want to delete the original track?</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CGrid</name>
     <message>
         <source>[Grid: %1] </source>
@@ -393,7 +434,7 @@
 <context>
     <name>CHistoryListWidget</name>
     <message>
-        <location filename="../helpers/CHistoryListWidget.cpp" line="32"/>
+        <location filename="../helpers/CHistoryListWidget.cpp" line="34"/>
         <source>Cut history</source>
         <translation>Cortar historial</translation>
     </message>
@@ -1665,7 +1706,7 @@ no es una definición de sistema de coordenadas válido:
         <source>This software is licensed under GPL3 or any later version</source>
         <translation type="unfinished"></translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../IAbout.ui" line="145"/>
         <source>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</source>
         <translation type="unfinished"></translation>
@@ -1732,36 +1773,56 @@ no es una definición de sistema de coordenadas válido:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="20"/>
+        <location filename="../dem/IDemPropSetup.ui" line="35"/>
         <source><html><head/><body><p>Change opacity of map</p></body></html></source>
         <translation><html><head/><body><p>Cambiar la opacidad del mapa</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="32"/>
+        <location filename="../dem/IDemPropSetup.ui" line="50"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Pulse para usar la escala actual como la escala mínima a la que mostrar el mapa.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="35"/>
-        <location filename="../dem/IDemPropSetup.ui" line="72"/>
+        <location filename="../dem/IDemPropSetup.ui" line="53"/>
+        <location filename="../dem/IDemPropSetup.ui" line="90"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="56"/>
+        <location filename="../dem/IDemPropSetup.ui" line="74"/>
         <source><html><head/><body><p>Control the range of scale the map is displayed. Use the two buttons left and right to define the actual scale as either minimum or maximum scale.</p></body></html></source>
         <translation><html><head/><body><p>Controle el rango de escalas para las cuales desea que se muestre el mapa. Use los dos botones a izquierda y derecha para definir la escala actual como bien la escala mínima o máxima para el mapa.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="69"/>
+        <location filename="../dem/IDemPropSetup.ui" line="87"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Pulse para usar la escala actual como la escala máxima a la que mostrar el mapa</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="97"/>
+        <location filename="../dem/IDemPropSetup.ui" line="124"/>
         <source>Hillshading</source>
         <translation>Sombreado</translation>
     </message>
+    <message>
+        <location filename="../dem/IDemPropSetup.ui" line="150"/>
+        <source>Slope </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../dem/IDemPropSetup.ui" line="192"/>
+        <location filename="../dem/IDemPropSetup.ui" line="199"/>
+        <location filename="../dem/IDemPropSetup.ui" line="206"/>
+        <location filename="../dem/IDemPropSetup.ui" line="213"/>
+        <location filename="../dem/IDemPropSetup.ui" line="232"/>
+        <location filename="../dem/IDemPropSetup.ui" line="251"/>
+        <location filename="../dem/IDemPropSetup.ui" line="270"/>
+        <location filename="../dem/IDemPropSetup.ui" line="277"/>
+        <location filename="../dem/IDemPropSetup.ui" line="284"/>
+        <location filename="../dem/IDemPropSetup.ui" line="303"/>
+        <location filename="../dem/IDemPropSetup.ui" line="310"/>
+        <source>TextLabel</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>IDemsList</name>
@@ -2006,6 +2067,11 @@ no es una definición de sistema de coordenadas válido:
     </message>
     <message>
         <location filename="../gis/trk/IDetailsTrk.ui" line="399"/>
+        <source>Filter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="436"/>
         <source>Hist.</source>
         <translation>Historial</translation>
     </message>
@@ -2092,6 +2158,225 @@ no es una definición de sistema de coordenadas válido:
     </message>
 </context>
 <context>
+    <name>IFilterDelete</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="51"/>
+        <source><b>Remove Track Points</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="63"/>
+        <source>Remove all hidden track points permanently.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDelete.ui" line="70"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterDouglasPeuker</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="45"/>
+        <source><b>Hide Points (Douglas Peuker)</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="57"/>
+        <source>Hide track points if the distance to a line between neighboring points is less than</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="70"/>
+        <source>m</source>
+        <translation type="unfinished">m</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="93"/>
+        <source>Apply filter now.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterDouglasPeuker.ui" line="96"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterMedian</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="51"/>
+        <source><b>Smooth Profile (Median Method)</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="63"/>
+        <source>Smooth deviation of the track points elevation with a Median filter of size </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="76"/>
+        <source>points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterMedian.ui" line="105"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterNewDate</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="35"/>
+        <source><b>Change Time</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="44"/>
+        <source>Change start of track to </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterNewDate.ui" line="71"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterObscureDate</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="45"/>
+        <source><b>Obscure Timestamps</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="54"/>
+        <source>Increase timestamp by</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="61"/>
+        <source> sec.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="68"/>
+        <source>with each track point. 0 sec. will remove timestamps.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterObscureDate.ui" line="88"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterOffsetElevation</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="51"/>
+        <source><b>Offset Elevation</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="69"/>
+        <source>Add offset of</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="95"/>
+        <source>to track points elevation.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterOffsetElevation.ui" line="115"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterReplaceElevation</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="51"/>
+        <source><b>Replace Elevation Data</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="63"/>
+        <source>Replace elevation of track points with the values from loaded DEM files.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterReplaceElevation.ui" line="70"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IFilterSpeed</name>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="35"/>
+        <source><b>Change Speed</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="44"/>
+        <source>Set speed to </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="51"/>
+        <source> km/h</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/IFilterSpeed.ui" line="102"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
     <name>IGisWidget</name>
     <message>
         <location filename="../gis/IGisWidget.ui" line="14"/>
@@ -2511,54 +2796,54 @@ no es una definición de sistema de coordenadas válido:
         <translation><html><head/><body><p>Cambiar la opacidad del mapa</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="47"/>
+        <location filename="../map/IMapPropSetup.ui" line="50"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Pulse para usar la escala actual como la escala mínima a la que mostrar el mapa.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="50"/>
-        <location filename="../map/IMapPropSetup.ui" line="87"/>
-        <location filename="../map/IMapPropSetup.ui" line="194"/>
+        <location filename="../map/IMapPropSetup.ui" line="53"/>
+        <location filename="../map/IMapPropSetup.ui" line="90"/>
+        <location filename="../map/IMapPropSetup.ui" line="200"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="71"/>
+        <location filename="../map/IMapPropSetup.ui" line="74"/>
         <source><html><head/><body><p>Control the range of scale the map is displayed. Use the two buttons left and right to define the actual scale as either minimum or maximum scale.</p></body></html></source>
         <translation><html><head/><body><p>Controle el rango de escalas para las cuales desea que se muestre el mapa. Use los dos botones a izquierda y derecha para definir la escala actual como bien la escala mínima o máxima para el mapa.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="84"/>
+        <location filename="../map/IMapPropSetup.ui" line="87"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
         <translation><html><head/><body><p>Pulse para usar la escala actual como la escala máxima a la que mostrar el mapa.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="134"/>
+        <location filename="../map/IMapPropSetup.ui" line="137"/>
         <source>Areas</source>
         <translation>Áreas</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="141"/>
+        <location filename="../map/IMapPropSetup.ui" line="144"/>
         <source>Lines</source>
         <translation>Líneas</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="148"/>
+        <location filename="../map/IMapPropSetup.ui" line="151"/>
         <source>Points</source>
         <translation>Puntos</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="184"/>
+        <location filename="../map/IMapPropSetup.ui" line="190"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="208"/>
+        <location filename="../map/IMapPropSetup.ui" line="220"/>
         <source>Cache Size (MB)</source>
         <translation>Tamaño de Caché (MiB)</translation>
     </message>
     <message>
-        <location filename="../map/IMapPropSetup.ui" line="228"/>
+        <location filename="../map/IMapPropSetup.ui" line="240"/>
         <source>Expiration (Days)</source>
         <translation>Caducidad (Días)</translation>
     </message>
@@ -2703,7 +2988,7 @@ o
         <source>m</source>
         <translation>m</translation>
     </message>
-    <message utf8="true">
+    <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="76"/>
         <source>°</source>
         <translation>º</translation>
@@ -3503,57 +3788,57 @@ Filename: %1</source>
     <message>
         <location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
         <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
-        <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
+        <location filename="../gis/qms/CQmsProject.cpp" line="145"/>
         <source>Failed to open...</source>
         <translation>Fallo al abrir...</translation>
     </message>
     <message>
         <location filename="../gis/gpx/CGpxProject.cpp" line="53"/>
         <location filename="../gis/qms/CQmsProject.cpp" line="48"/>
-        <location filename="../gis/qms/CQmsProject.cpp" line="136"/>
+        <location filename="../gis/qms/CQmsProject.cpp" line="145"/>
         <source>Failed to open %1</source>
         <translation>Fallo al abrir %1</translation>
     </message>
     <message>
         <location filename="../gis/db/CDBProject.cpp" line="125"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="151"/>
-        <location filename="../gis/qms/CQmsProject.cpp" line="91"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="155"/>
+        <location filename="../gis/qms/CQmsProject.cpp" line="95"/>
         <source>Save GIS data to...</source>
         <translation>Guardar los datos GIS en...</translation>
     </message>
     <message>
-        <location filename="../gis/db/CDBProject.cpp" line="154"/>
+        <location filename="../gis/db/CDBProject.cpp" line="157"/>
         <source>Save ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/db/CDBProject.cpp" line="154"/>
+        <location filename="../gis/db/CDBProject.cpp" line="157"/>
         <source>Abort save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="222"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="231"/>
         <source>File exists ...</source>
         <translation>El archivo ya existe ...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="223"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="232"/>
         <source>The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file.  Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b></source>
         <translation>El archivo ya existe y no lo ha creado QMapShack. Si pulsa 'sí' todos los datos de este archivo se perderán. Incluso si el archivo contiene datos GPX y QMapShack lo ha leído, QMapShack podría no ser capaz de leer y almacenar todos los elementos en el archivo, y aquellos que no haya leído se perderán. Se le recomienda usar otro archivo distinto. <b>¿Quiere realmente sobrescribir el archivo</b></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="289"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="298"/>
         <source>Failed to create file '%1'</source>
         <translation>Fallo al crear el archivo '%1'</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="289"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="299"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="298"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="308"/>
         <source>Saveing GIS data failed...</source>
         <translation>Fallo al guardar los datos GIS...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="299"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="308"/>
         <source>Failed to write file '%1'</source>
         <translation>Fallo al escribir en el archivo '%1'</translation>
     </message>
@@ -3634,12 +3919,12 @@ Filename: %1</source>
         <translation> En movimiento: - (-) </translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="956"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="973"/>
         <source>Hide points.</source>
         <translation>Ocultar puntos.</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="990"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1007"/>
         <source>Show points.</source>
         <translation>Mostrar puntos.</translation>
     </message>
@@ -3738,14 +4023,14 @@ Filename: %1</source>
     </message>
     <message>
         <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="505"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1295"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1312"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="347"/>
         <source>Changed links</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="517"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1307"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1324"/>
         <source>Changed color</source>
         <translation>Se cambió el color</translation>
     </message>
@@ -3760,17 +4045,17 @@ Filename: %1</source>
         <translation>Proximidad: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1277"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1294"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="298"/>
         <source>Changed name</source>
         <translation>Se cambió el nombre</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="828"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="849"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="899"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1032"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="179"/>
         <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
@@ -3803,13 +4088,13 @@ Filename: %1</source>
         <translation>Se cambió el icono</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1283"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1300"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="335"/>
         <source>Changed comment</source>
         <translation>Se cambió el comentario</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1306"/>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="341"/>
         <source>Changed description</source>
         <translation>Se cambió la descripción</translation>
@@ -3846,60 +4131,60 @@ Filename: %1</source>
         <translation>Este es un fichero TYP con una codificación de polilíneas desconocida. ¡Por favor repórtelo!</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="285"/>
+        <location filename="../gis/IGisItem.cpp" line="286"/>
         <source>Initial version.</source>
         <translation>Versión inicial</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="369"/>
+        <location filename="../gis/IGisItem.cpp" line="370"/>
         <source>This element is probably read-only because it was not created within QMapShack. Usually you should not want to change imported data. But if you think that is ok press'Ok'.</source>
         <translation>Este elemento probablemente sea de sólo lectura por no haber sido creado por QMapShack. Habitualmente no deseará cambiar los datos importados. De lo contrario, es correcto pulsar 'OK'.</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="370"/>
+        <location filename="../gis/IGisItem.cpp" line="371"/>
         <source>Read Only Mode...</source>
         <translation>Modo Sólo Lectura...</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="559"/>
+        <location filename="../gis/IGisItem.cpp" line="560"/>
         <source><h4>Comment:</h4></source>
         <translation type="unfinished"><h4>Comentario:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="562"/>
+        <location filename="../gis/IGisItem.cpp" line="563"/>
         <source><p>--- no comment ---</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="569"/>
-        <location filename="../gis/IGisItem.cpp" line="599"/>
+        <location filename="../gis/IGisItem.cpp" line="570"/>
+        <location filename="../gis/IGisItem.cpp" line="600"/>
         <source><h4>Description:</h4></source>
         <translation type="unfinished"><h4>Descripción:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="572"/>
-        <location filename="../gis/IGisItem.cpp" line="602"/>
+        <location filename="../gis/IGisItem.cpp" line="573"/>
+        <location filename="../gis/IGisItem.cpp" line="603"/>
         <source><p>--- no description ---</p></source>
         <translation type="unfinished"><p>---sin descripción---</p></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="579"/>
-        <location filename="../gis/IGisItem.cpp" line="609"/>
+        <location filename="../gis/IGisItem.cpp" line="580"/>
+        <location filename="../gis/IGisItem.cpp" line="610"/>
         <source><h4>Links:</h4></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="582"/>
-        <location filename="../gis/IGisItem.cpp" line="612"/>
+        <location filename="../gis/IGisItem.cpp" line="583"/>
+        <location filename="../gis/IGisItem.cpp" line="613"/>
         <source><p>--- no links ---</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="819"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="827"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="845"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="888"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1015"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="813"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="828"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="849"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="899"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1032"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
         <source>Enter new track name.</source>
         <translation>Introduzca el nombre del nuevo track.</translation>
@@ -3910,7 +4195,7 @@ Filename: %1</source>
         <translation>Introduzca el nombre del nuevo área.</translation>
     </message>
     <message>
-        <location filename="../gis/db/CDBFolderDatabase.cpp" line="27"/>
+        <location filename="../gis/db/CDBFolderDatabase.cpp" line="28"/>
         <location filename="../gis/db/CDBFolderLostFound.cpp" line="30"/>
         <source>All your data grouped by folders.</source>
         <translation type="unfinished"></translation>
@@ -3955,5 +4240,50 @@ Filename: %1</source>
         <source>Number of trackpoints is not equal the number of shadow data trackpoints.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="96"/>
+        <source>Hide points by Douglas Peuker algorithm (%1%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="122"/>
+        <source>Permanently removed all hidden track points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="173"/>
+        <source>Smoothed profile with a Median filter of size %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="210"/>
+        <source>Replaced elevation data with data from DEM files.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="234"/>
+        <source>Offset elevation data by %1%2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="254"/>
+        <source>Changed start of track to %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="273"/>
+        <source>Remove timestamps.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="296"/>
+        <source>Set artifical timestamps with delta of %1 sec.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/filter/filter.cpp" line="330"/>
+        <source>Changed speed to %1%2.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
diff --git a/src/map/CMapIMG.cpp b/src/map/CMapIMG.cpp
index 6b241f6..23bbcfc 100644
--- a/src/map/CMapIMG.cpp
+++ b/src/map/CMapIMG.cpp
@@ -2132,7 +2132,7 @@ void CMapIMG::drawPois(QPainter& p, pointtype_t& pts, QVector<QRectF> &rectPois)
 void CMapIMG::drawLabels(QPainter& p, const QVector<strlbl_t> &lbls)
 {
     QFont f = CMainWindow::self().getMapFont();
-    QVector<QFont> fonts(5, f);
+    QVector<QFont> fonts(8, f);
     fonts[CGarminTyp::eSmall].setPointSize(f.pointSize() - 2);
     fonts[CGarminTyp::eLarge].setPointSize(f.pointSize() + 2);
 
diff --git a/src/map/IMapPropSetup.ui b/src/map/IMapPropSetup.ui
index 3690e31..bede242 100644
--- a/src/map/IMapPropSetup.ui
+++ b/src/map/IMapPropSetup.ui
@@ -41,6 +41,9 @@
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>3</number>
+     </property>
      <item>
       <widget class="QToolButton" name="toolSetMinScale">
        <property name="toolTip">
@@ -178,6 +181,9 @@
       </property>
       <item>
        <layout class="QHBoxLayout" name="horizontalLayout_3">
+        <property name="spacing">
+         <number>3</number>
+        </property>
         <item>
          <widget class="QLabel" name="labelCachePath">
           <property name="text">
@@ -202,6 +208,12 @@
         <property name="fieldGrowthPolicy">
          <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
         </property>
+        <property name="horizontalSpacing">
+         <number>3</number>
+        </property>
+        <property name="verticalSpacing">
+         <number>3</number>
+        </property>
         <item row="0" column="0">
          <widget class="QLabel" name="label_2">
           <property name="text">
diff --git a/src/mouse/CScrOptRangeTrk.cpp b/src/mouse/CScrOptRangeTrk.cpp
index cf17ce7..213abfe 100644
--- a/src/mouse/CScrOptRangeTrk.cpp
+++ b/src/mouse/CScrOptRangeTrk.cpp
@@ -30,6 +30,10 @@ CScrOptRangeTrk::CScrOptRangeTrk(const QPointF &point, CGisItemTrk * trk, QWidge
     label->setText(trk->getInfoRange());
     adjustSize();
 
+    bool isReadOnly = trk->isReadOnly();
+    toolHidePoints->setEnabled(!isReadOnly);
+    toolShowPoints->setEnabled(!isReadOnly);
+
     setOrigin(point.toPoint());
 
     move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
diff --git a/src/plot/CPlotSpeed.cpp b/src/plot/CPlotSpeed.cpp
index 69ff9bf..83dc7cc 100644
--- a/src/plot/CPlotSpeed.cpp
+++ b/src/plot/CPlotSpeed.cpp
@@ -88,6 +88,8 @@ void CPlotSpeed::updateData()
 
     newLine(lineSpeed, "GPS");
     setLimits();
+    data->ymin = 0;
+    data->y().setLimits(0,data->ymax);
     resetZoom();
 }
 
diff --git a/src/resources.qrc b/src/resources.qrc
index 82be419..777a56e 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -125,6 +125,8 @@
         <file>icons/32x32/Link.png</file>
         <file>icons/32x32/Database.png</file>
         <file>icons/32x32/Empty.png</file>
+        <file>icons/32x32/Apply.png</file>
+        <file>icons/32x32/Time.png</file>
 
 
         <file>icons/48x48/2DFix.png</file>
@@ -233,6 +235,8 @@
         <file>icons/48x48/Link.png</file>
         <file>icons/48x48/Database.png</file>
         <file>icons/48x48/Empty.png</file>
+        <file>icons/48x48/Apply.png</file>
+        <file>icons/48x48/Time.png</file>
 
 
         <file>icons/cache/32x32/bluepin.png</file>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/qmapshack.git



More information about the Pkg-grass-devel mailing list