[qmapshack] 01/02: Imported Upstream version 0.5.0

Jaromír Mikeš mira-guest at moszumanska.debian.org
Tue Oct 7 10:51:51 UTC 2014


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

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

commit a8a994a9738e2d7e92d155e97268055c8be3641a
Author: Jaromír Mikeš <mira.mikes at seznam.cz>
Date:   Tue Oct 7 12:51:11 2014 +0200

    Imported Upstream version 0.5.0
---
 CMakeLists.txt                                     |    5 +-
 CMakeLists.txt.user                                |    2 +-
 src/mouse/IScrOpt.cpp => GpxExamples/COPYRIGHT     |   24 +-
 README.md                                          |    5 +-
 changelog.txt                                      |   19 +
 nsi/3rdparty.txt                                   |   29 +-
 nsi/MUI_HEADERIMAGE.bmp                            |  Bin 0 -> 34254 bytes
 nsi/MUI_WELCOMEFINISHPAGE.bmp                      |  Bin 0 -> 154542 bytes
 nsi/QMapShack_Installer.nsi                        |   46 +-
 nsi/copyfiles.bat                                  |   15 +-
 nsi/gdalicon.ico                                   |  Bin 0 -> 4286 bytes
 nsi/konsole.ico                                    |  Bin 15086 -> 0 bytes
 src/CMainWindow.cpp                                |   31 +
 src/CMainWindow.h                                  |    3 +
 src/CMakeLists.txt                                 |   59 +-
 src/IAbout.ui                                      |  217 +--
 src/canvas/CCanvas.cpp                             |  185 ++-
 src/canvas/CCanvas.h                               |   48 +-
 src/canvas/IDrawContext.h                          |    1 -
 src/canvas/IDrawObject.cpp                         |   13 +
 src/canvas/IDrawObject.h                           |   55 +-
 src/cursors/cursorAdd.png                          |  Bin 0 -> 1194 bytes
 src/cursors/cursorMoveArea.png                     |  Bin 0 -> 1801 bytes
 src/cursors/cursorMoveLine.png                     |  Bin 0 -> 1503 bytes
 src/cursors/cursorSelectRange.png                  |  Bin 0 -> 1357 bytes
 src/dem/CDemDraw.cpp                               |   12 +-
 src/dem/CDemDraw.h                                 |    4 +-
 src/dem/CDemPropSetup.cpp                          |    7 +
 src/dem/CDemVRT.cpp                                |    6 +-
 src/dem/CDemVRT.h                                  |    3 +-
 src/dem/IDem.cpp                                   |   39 +-
 src/dem/IDem.h                                     |   12 +-
 src/dem/IDemPropSetup.ui                           |   50 +-
 src/gis/CGisDraw.cpp                               |    5 +
 src/gis/CGisDraw.h                                 |    5 +-
 src/gis/CGisListWks.cpp                            |  279 +++-
 src/gis/CGisListWks.h                              |   10 +-
 src/gis/CGisProject.cpp                            |   71 +-
 src/gis/CGisProject.h                              |    2 +
 src/gis/CGisWidget.cpp                             |  130 +-
 src/gis/CGisWidget.h                               |   56 +-
 src/gis/IGisItem.cpp                               |   99 +-
 src/gis/IGisItem.h                                 |   39 +-
 src/{mouse/IScrOpt.cpp => gis/IGisLine.cpp}        |   15 +-
 src/{map/CMapMAP.h => gis/IGisLine.h}              |   19 +-
 src/gis/IGisWidget.ui                              |    8 +-
 src/gis/WptIcons.cpp                               |    3 +
 src/gis/ovl/CDetailsOvlArea.cpp                    |  269 +++
 .../{wpt/CDetailsWpt.h => ovl/CDetailsOvlArea.h}   |   40 +-
 src/gis/ovl/CGisItemOvlArea.cpp                    |  574 +++++++
 src/gis/ovl/CGisItemOvlArea.h                      |  148 ++
 .../{trk/CScrOptTrk.cpp => ovl/CScrOptOvlArea.cpp} |   60 +-
 src/gis/{wpt/CScrOptWpt.h => ovl/CScrOptOvlArea.h} |   22 +-
 src/gis/ovl/IDetailsOvlArea.ui                     |  246 +++
 .../{trk/IScrOptTrk.ui => ovl/IScrOptOvlArea.ui}   |   43 +-
 src/gis/rte/CGisItemRte.cpp                        |   39 +-
 src/gis/rte/CGisItemRte.h                          |   10 +-
 src/gis/rte/CScrOptRte.cpp                         |   29 +-
 src/gis/rte/CScrOptRte.h                           |    2 +-
 src/gis/trk/CDetailsTrk.cpp                        |  320 ++++
 src/gis/trk/CDetailsTrk.h                          |   73 +
 src/gis/trk/CGisItemTrk.cpp                        |  726 +++++++-
 src/gis/trk/CGisItemTrk.h                          |  186 ++-
 src/gis/trk/CScrOptTrk.cpp                         |   62 +-
 src/gis/trk/CScrOptTrk.h                           |   11 +-
 src/gis/trk/IDetailsTrk.ui                         |  361 ++++
 src/gis/trk/IScrOptTrk.ui                          |   59 +-
 src/gis/wpt/CDetailsWpt.cpp                        |   91 +-
 src/gis/wpt/CDetailsWpt.h                          |    4 +-
 src/gis/wpt/CGisItemWpt.cpp                        |  149 +-
 src/gis/wpt/CGisItemWpt.h                          |   44 +-
 src/gis/wpt/CProjWpt.cpp                           |   16 -
 src/gis/wpt/CScrOptWpt.cpp                         |   28 +-
 src/gis/wpt/CScrOptWpt.h                           |    2 +-
 src/gis/wpt/IDetailsWpt.ui                         |  169 +-
 src/grid/CGrid.cpp                                 |   54 +-
 src/grid/CGrid.h                                   |    4 +-
 src/helpers/CSelectProjectDialog.cpp               |   82 +
 .../CSelectProjectDialog.h}                        |   34 +-
 src/helpers/ISelectProjectDialog.ui                |   80 +
 src/helpers/ITextEditWidget.ui                     |   72 +-
 src/icons/16x16/2DFix.png                          |  Bin 472 -> 0 bytes
 src/icons/16x16/3DFix.png                          |  Bin 535 -> 0 bytes
 src/icons/16x16/Add.png                            |  Bin 292 -> 0 bytes
 src/icons/16x16/AddMapWorkspace.png                |  Bin 740 -> 0 bytes
 src/icons/16x16/Cancel.png                         |  Bin 541 -> 0 bytes
 src/icons/16x16/Check.png                          |  Bin 495 -> 0 bytes
 src/icons/16x16/Close.png                          |  Bin 492 -> 0 bytes
 src/icons/16x16/Copy.png                           |  Bin 323 -> 0 bytes
 src/icons/16x16/Cut.png                            |  Bin 574 -> 0 bytes
 src/icons/16x16/DeleteMultiple.png                 |  Bin 473 -> 0 bytes
 src/icons/16x16/DeleteOne.png                      |  Bin 429 -> 0 bytes
 src/icons/16x16/Down.png                           |  Bin 418 -> 0 bytes
 src/icons/16x16/EditDetails.png                    |  Bin 725 -> 0 bytes
 src/icons/16x16/EditText.png                       |  Bin 586 -> 0 bytes
 src/icons/16x16/FolderDEM.png                      |  Bin 483 -> 0 bytes
 src/icons/16x16/FolderMap.png                      |  Bin 633 -> 0 bytes
 src/icons/16x16/Font.png                           |  Bin 400 -> 0 bytes
 src/icons/16x16/FromMap.png                        |  Bin 778 -> 0 bytes
 src/icons/16x16/GisProject.png                     |  Bin 625 -> 0 bytes
 src/icons/16x16/Grid.png                           |  Bin 425 -> 0 bytes
 src/icons/16x16/GridSetup.png                      |  Bin 853 -> 0 bytes
 src/icons/16x16/GridWizzard.png                    |  Bin 780 -> 0 bytes
 src/icons/16x16/Help.png                           |  Bin 585 -> 0 bytes
 src/icons/16x16/Info.png                           |  Bin 505 -> 0 bytes
 src/icons/16x16/LoadGIS.png                        |  Bin 551 -> 0 bytes
 src/icons/16x16/Lock.png                           |  Bin 539 -> 0 bytes
 src/icons/16x16/Map.png                            |  Bin 562 -> 0 bytes
 src/icons/16x16/MimeDemVRT.png                     |  Bin 655 -> 0 bytes
 src/icons/16x16/MimeIMG.png                        |  Bin 680 -> 0 bytes
 src/icons/16x16/MimeJNX.png                        |  Bin 685 -> 0 bytes
 src/icons/16x16/MimeMAP.png                        |  Bin 793 -> 0 bytes
 src/icons/16x16/MimeRMAP.png                       |  Bin 755 -> 0 bytes
 src/icons/16x16/MimeVRT.png                        |  Bin 717 -> 0 bytes
 src/icons/16x16/MouseWheel.png                     |  Bin 614 -> 0 bytes
 src/icons/16x16/NightDay.png                       |  Bin 474 -> 0 bytes
 src/icons/16x16/NoFix.png                          |  Bin 408 -> 0 bytes
 src/icons/16x16/Off.png                            |  Bin 582 -> 0 bytes
 src/icons/16x16/POIText.png                        |  Bin 446 -> 0 bytes
 src/icons/16x16/Paste.png                          |  Bin 346 -> 0 bytes
 src/icons/16x16/QMapShack.png                      |  Bin 713 -> 0 bytes
 src/icons/16x16/Redo.png                           |  Bin 484 -> 0 bytes
 src/icons/16x16/Reset.png                          |  Bin 632 -> 0 bytes
 src/icons/16x16/Right.png                          |  Bin 388 -> 0 bytes
 src/icons/16x16/Route.png                          |  Bin 879 -> 0 bytes
 src/icons/16x16/SaveAllGIS.png                     |  Bin 751 -> 0 bytes
 src/icons/16x16/SaveGIS.png                        |  Bin 538 -> 0 bytes
 src/icons/16x16/Scale.png                          |  Bin 383 -> 0 bytes
 src/icons/16x16/SelectColor.png                    |  Bin 750 -> 0 bytes
 src/icons/16x16/SetupMapWorkspace.png              |  Bin 781 -> 0 bytes
 src/icons/16x16/Tainted.png                        |  Bin 594 -> 0 bytes
 src/icons/16x16/TextBold.png                       |  Bin 344 -> 0 bytes
 src/icons/16x16/TextCenter.png                     |  Bin 272 -> 0 bytes
 src/icons/16x16/TextItalic.png                     |  Bin 243 -> 0 bytes
 src/icons/16x16/TextJustified.png                  |  Bin 234 -> 0 bytes
 src/icons/16x16/TextLeft.png                       |  Bin 264 -> 0 bytes
 src/icons/16x16/TextRight.png                      |  Bin 262 -> 0 bytes
 src/icons/16x16/TextUnderlined.png                 |  Bin 332 -> 0 bytes
 src/icons/16x16/TimeZoneSetup.png                  |  Bin 847 -> 0 bytes
 src/icons/16x16/ToBottom.png                       |  Bin 427 -> 0 bytes
 src/icons/16x16/ToTop.png                          |  Bin 434 -> 0 bytes
 src/icons/16x16/ToolTip.png                        |  Bin 558 -> 0 bytes
 src/icons/16x16/Track.png                          |  Bin 432 -> 0 bytes
 src/icons/16x16/UnLock.png                         |  Bin 541 -> 0 bytes
 src/icons/16x16/Undo.png                           |  Bin 493 -> 0 bytes
 src/icons/16x16/Up.png                             |  Bin 427 -> 0 bytes
 src/icons/16x16/WptMove.png                        |  Bin 518 -> 0 bytes
 src/icons/16x16/WptProj.png                        |  Bin 453 -> 0 bytes
 src/icons/32x32/AddArea.png                        |  Bin 0 -> 1288 bytes
 src/icons/32x32/AddTrk.png                         |  Bin 0 -> 979 bytes
 src/icons/32x32/AddWpt.png                         |  Bin 0 -> 852 bytes
 src/icons/32x32/Area.png                           |  Bin 0 -> 1172 bytes
 src/icons/32x32/AreaMove.png                       |  Bin 0 -> 1680 bytes
 src/icons/32x32/LineMove.png                       |  Bin 0 -> 1150 bytes
 src/icons/32x32/MimeWMTS.png                       |  Bin 0 -> 1716 bytes
 src/icons/32x32/PointMove.png                      |  Bin 0 -> 968 bytes
 src/icons/32x32/SelectRange.png                    |  Bin 0 -> 628 bytes
 src/icons/32x32/Tainted.png                        |  Bin 1206 -> 1182 bytes
 src/icons/32x32/TrkCut.png                         |  Bin 0 -> 1507 bytes
 src/icons/32x32/TrkProfile.png                     |  Bin 0 -> 1002 bytes
 src/icons/48x48/AddArea.png                        |  Bin 0 -> 2044 bytes
 src/icons/48x48/AddTrk.png                         |  Bin 0 -> 1235 bytes
 src/icons/48x48/AddWpt.png                         |  Bin 0 -> 1228 bytes
 src/icons/48x48/Area.png                           |  Bin 0 -> 1893 bytes
 src/icons/48x48/AreaMove.png                       |  Bin 0 -> 2814 bytes
 src/icons/48x48/LineMove.png                       |  Bin 0 -> 1784 bytes
 src/icons/48x48/MimeWMTS.png                       |  Bin 0 -> 2952 bytes
 src/icons/48x48/PointMove.png                      |  Bin 0 -> 1518 bytes
 src/icons/48x48/SelectRange.png                    |  Bin 0 -> 849 bytes
 src/icons/48x48/Tainted.png                        |  Bin 1971 -> 1896 bytes
 src/icons/48x48/TrkCut.png                         |  Bin 0 -> 2422 bytes
 src/icons/48x48/TrkProfile.png                     |  Bin 0 -> 1359 bytes
 src/icons/AddArea.svg                              |  217 +++
 src/icons/AddTrk.svg                               |  192 +++
 src/icons/AddWpt.svg                               |   86 +
 src/icons/Area.svg                                 |  230 +++
 src/icons/AreaMove.svg                             |  216 +++
 src/icons/LineMove.svg                             |  168 ++
 src/icons/MimeWMTS.svg                             |   98 ++
 src/icons/PointMove.svg                            |  162 ++
 src/icons/SelectRange.svg                          |  148 ++
 src/icons/Tainted.svg                              |   10 +-
 src/icons/TrkCut.svg                               |  121 ++
 src/icons/TrkProfile.svg                           |   99 ++
 src/icons/makeicons                                |    1 -
 src/icons/waypoints/32x32/Waypoint.png             |  Bin 0 -> 533 bytes
 src/icons/waypoints/Waypoint.svg                   |  101 ++
 src/locale/qmapshack_cs.ts                         | 1752 ++++++++++++++------
 src/locale/qmapshack_de.ts                         | 1385 ++++++++++++----
 src/locale/qmapshack_es.ts                         |  939 +++++++++--
 src/main.cpp                                       |   14 +
 src/map/CMapDraw.cpp                               |   24 +-
 src/map/CMapDraw.h                                 |   16 +
 src/map/CMapIMG.cpp                                |   36 +-
 src/map/CMapIMG.h                                  |   17 +-
 src/map/CMapItem.cpp                               |   11 +-
 src/map/CMapJNX.cpp                                |    8 +-
 src/map/CMapJNX.h                                  |   16 +-
 src/map/CMapMAP.cpp                                |  122 ++
 src/map/CMapMAP.h                                  |   73 +
 src/map/CMapPropSetup.cpp                          |   43 +
 src/map/CMapPropSetup.h                            |    2 +
 src/map/CMapVRT.cpp                                |    6 +-
 src/map/CMapVRT.h                                  |    9 +-
 src/map/CMapWMTS.cpp                               |  529 ++++++
 src/map/CMapWMTS.h                                 |  115 ++
 src/map/IMap.h                                     |    5 +
 src/map/IMapList.ui                                |    5 +-
 src/map/IMapPropSetup.ui                           |  136 +-
 src/map/garmin/Garmin.h                            |    4 +-
 src/{mouse/IScrOpt.cpp => map/mapsforge/types.cpp} |   55 +-
 src/{mouse/IScrOpt.cpp => map/mapsforge/types.h}   |   34 +-
 src/map/wmts/CDiskCache.cpp                        |  156 ++
 src/map/{CMapPropSetup.h => wmts/CDiskCache.h}     |   48 +-
 src/{mouse/IScrOpt.cpp => map/wmts/IDiskCache.cpp} |   16 +-
 src/{gis/CGisDraw.h => map/wmts/IDiskCache.h}      |   24 +-
 src/mouse/CMouseEditArea.cpp                       |   89 +
 .../CMapPropSetup.h => mouse/CMouseEditArea.h}     |   31 +-
 src/mouse/CMouseEditTrk.cpp                        |   95 ++
 .../trk/CScrOptTrk.h => mouse/CMouseEditTrk.h}     |   29 +-
 src/mouse/CMouseMoveWpt.cpp                        |    4 +-
 src/mouse/CMouseMoveWpt.h                          |    2 +-
 src/mouse/CMouseNormal.cpp                         |  122 +-
 src/mouse/CMouseNormal.h                           |   12 +-
 src/mouse/{IScrOpt.cpp => CScrOptEditLine.cpp}     |   20 +-
 src/{map/CMapMAP.h => mouse/CScrOptEditLine.h}     |   21 +-
 src/mouse/{IScrOpt.cpp => CScrOptPoint.cpp}        |   24 +-
 src/{map/CMapMAP.h => mouse/CScrOptPoint.h}        |   19 +-
 src/mouse/{IScrOpt.cpp => CScrOptRange.cpp}        |   23 +-
 src/{map/CMapMAP.h => mouse/CScrOptRange.h}        |   19 +-
 src/mouse/CScrOptUnclutter.cpp                     |    1 +
 src/mouse/IMouse.cpp                               |   17 +-
 src/mouse/IMouse.h                                 |    4 +-
 src/mouse/IMouseEditLine.cpp                       |  687 ++++++++
 src/mouse/IMouseEditLine.h                         |  143 ++
 src/mouse/IScrOpt.cpp                              |   41 +-
 src/mouse/IScrOpt.h                                |    4 +
 src/mouse/IScrOptEditLine.ui                       |  100 ++
 src/mouse/IScrOptPoint.ui                          |  108 ++
 src/mouse/IScrOptRange.ui                          |   49 +
 src/pics/about.png                                 |  Bin 0 -> 27155 bytes
 src/pics/noMap256x256.png                          |  Bin 0 -> 19894 bytes
 src/plot/CPlotAxis.cpp                             |  388 +++++
 src/plot/CPlotAxis.h                               |  151 ++
 src/plot/CPlotAxisTime.cpp                         |  130 ++
 src/{mouse/IScrOpt.h => plot/CPlotAxisTime.h}      |   37 +-
 src/plot/CPlotData.cpp                             |   90 +
 src/plot/CPlotData.h                               |   93 ++
 src/plot/CPlotDistance.cpp                         |  120 ++
 src/{map/CMapMAP.h => plot/CPlotDistance.h}        |   22 +-
 src/plot/CPlotProfile.cpp                          |  134 ++
 src/{map/CMapMAP.h => plot/CPlotProfile.h}         |   21 +-
 src/plot/CPlotSpeed.cpp                            |  115 ++
 src/{map/CMapMAP.h => plot/CPlotSpeed.h}           |   22 +-
 src/plot/CPlotTrack.cpp                            |  160 ++
 src/{map/CMapPropSetup.h => plot/CPlotTrack.h}     |   46 +-
 src/plot/IPlot.cpp                                 |  836 ++++++++++
 src/plot/IPlot.h                                   |  128 ++
 src/resources.qrc                                  |   99 +-
 src/units/CUnitMetric.cpp                          |    2 +-
 src/units/IUnit.cpp                                |   10 +-
 src/units/IUnit.h                                  |   11 +-
 262 files changed, 15315 insertions(+), 2153 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index c2dbd9f..d7a90d4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,16 +10,17 @@ endif(UNIX)
 
 
 if(WIN32)
-set(CMAKE_PREFIX_PATH C:/Qt5/5.3/msvc2013_64)
+set(QT_DEV_PATH   "" CACHE PATH "Path to directory containing Qt5 include and lib, e.g. C:\\Qt5\\5.3\\msvc2013_64")
 set(GDAL_DEV_PATH "" CACHE PATH "Path to directory containing GDAL include and lib, e.g. M:\\lib\\gdal")
 set(PROJ_DEV_PATH "" CACHE PATH "Path to directory containing PROJ.4 include and lib, e.g. M:\\lib\\PROJ")
+set(CMAKE_PREFIX_PATH ${QT_DEV_PATH})
 endif(WIN32)
 
 
 set(APPLICATION_NAME qmapshack)
 
 set(APPLICATION_VERSION_MAJOR "0")
-set(APPLICATION_VERSION_MINOR "3")
+set(APPLICATION_VERSION_MINOR "5")
 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 19e2a20..d8476d7 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.1.1, 2014-08-15T18:18:03. -->
+<!-- Written by QtCreator 3.1.1, 2014-10-05T17:39:27. -->
 <qtcreator>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
diff --git a/src/mouse/IScrOpt.cpp b/GpxExamples/COPYRIGHT
similarity index 79%
copy from src/mouse/IScrOpt.cpp
copy to GpxExamples/COPYRIGHT
index 735b533..fff30ea 100644
--- a/src/mouse/IScrOpt.cpp
+++ b/GpxExamples/COPYRIGHT
@@ -1,3 +1,5 @@
+*.gpx files in this dir are created by  Oliver Eichler <oliver.eichler at gmx.de> and released under GPL-3.0+ license
+
 /**********************************************************************************************
     Copyright (C) 2014 Oliver Eichler oliver.eichler at gmx.de
 
@@ -15,25 +17,3 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 **********************************************************************************************/
-
-#include "IScrOpt.h"
-#include "units/IUnit.h"
-#include <QtWidgets>
-
-
-IScrOpt::IScrOpt(QWidget *parent)
-    : QWidget(parent)
-{
-
-}
-
-IScrOpt::~IScrOpt()
-{
-
-}
-
-
-void IScrOpt::mouseMoveEvent(QMouseEvent * e)
-{
-    mousePos = e->pos();
-}
diff --git a/README.md b/README.md
index cd8a9ec..1ee92a5 100644
--- a/README.md
+++ b/README.md
@@ -6,10 +6,13 @@ You need a working mercurial, g++, cmake and QT5 installation to compile QMapSha
         ccmake ../QMapShack
         make
 
-To update the code to the cutting edge do in build_QMapShack::
+To update the code to the cutting edge do in QMapShack::
 
         hg pull
         hg update
+
+And change back to build_QMapShack::
+
         make
 
 As everything is better with a GUI you might want to have a look at [TortoiseHg](http://tortoisehg.bitbucket.org/).
diff --git a/changelog.txt b/changelog.txt
index c0f83e2..4634eb5 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,22 @@
+V 0.5.0
+* Add support for WMTS maps
+* Edit/create tracks
+* Edit/create area overlays
+* Add contrast factor to hillshading
+
+V 0.4.0
+* Add position dialog to "add waypoint"
+* Beautify waypoint edit dialog
+* Add on-screen information and detail dialog for tracks
+* Add drag-n-drop to workspace list to move items (draw order & copy between projects)
+
+V 0.3.1
+* another favour for Debian release
+* Added "Add Waypoint" to mouse context menu
+
+V 0.3.0.bureaucratic
+* Add copyright notice to GpxExamples to satisfy bureaucrats @ debian
+
 V 0.3.0
 
 * A lot of little fixes to prevent crashes and glitches due to multithreading
diff --git a/nsi/3rdparty.txt b/nsi/3rdparty.txt
index 81fe572..cea56d8 100644
--- a/nsi/3rdparty.txt
+++ b/nsi/3rdparty.txt
@@ -1,9 +1,6 @@
 QMapShack for Windows (short: QMS) is build with Visual Studio 2013 as 64bit application
 It depends on the 3rd party software listed below
 
-Compile instructions are given at the end of this file
-
-
 1.) Microsoft Visual C++ 2013 Redistributable Package
   The installer vcredist_x64.exe (ca 7MB size) as downloaded from
     http://www.microsoft.com/en-us/download/details.aspx?id=40784
@@ -20,8 +17,8 @@ Compile instructions are given at the end of this file
 4.) The PROJ library http://trac.osgeo.org/proj/
   
 5.) Icons for the Windows Start Menu ==> We should get rid of them and use own icons
-    kfm_home.ico, kget.ico, khelpcenter.ico, konsole.ico, xmag.ico 
-     have been created from the Nuvola 1.0 icon set (http://www.icon-king.com/projects/nuvola/)
+    kfm_home.ico has been created from the Nuvola 1.0 icon set (http://www.icon-king.com/projects/nuvola/)
+	gdalicon.ico has been converted from gdalicon.png from the GDAL package
  
 
 Additional tools for building and installing
@@ -55,28 +52,26 @@ Compile instructions - to be verified
 - nmake /f makefile.vc devinstall
 
 3.) Install QT5.3 or later 
-- Download and run the Qt5 Windows Online Installe from http://qt-project.org/downloads
+- Download and run the Qt5 Windows Online Installer from http://qt-project.org/downloads
   Install for VS2013, x64
-- Append or (better?) prepend the Qt5 binary path to your PATH environment variable, e.g.
-  C:\Qt5\5.3\msvc2013_64\bin;%PATH%  
 
 4.) Get the QMapshack source from the repository, e.g. 
    hg clone https://bitbucket.org/maproom/qmapshack QMapShack  
 Note: you might have to install TortoiseHG   
-  
-5.) TODO Adapt the search path to GDAL and PROJ.4 in the respective CMake Files
-  FindGDAL.cmake and FindPROJ.cmake
-  
-6.) Start the CMake GUI (you did install CMake before, didn't you)
-- Configure (and be sure that it finds GDAL and PROJ.4 ) 
-  TODO If Oliver accepts my CMake Files contribution from 22-July-2014, you can enter GDAL and PROJ.4 paths here directly
+   
+5.) Start the CMake GUI (you did install CMake before, didn't you)
+- Configure 
+  In the first run there will be errors. 
+  Now enter the directories where you have installed Qt5, GDAL and PROJ.4 to the respective variables.
+  After that, Configure again.  
 - Generate
 
-7.) Open the generated QMapShack.sln with VS2013
+6.) Open the generated QMapShack.sln with VS2013
 - Compile the Release Version
 
-8.) Create the installer by executing
+7.) Create the installer by executing
 - nsi/copyfiles.bat
+  Note: In copyfiles.bat, you may have to adapt the directories where you have installed Qt5, GDAL and PROJ.4.
 - nsi/QMapShack_Installer.nsi
   
 
diff --git a/nsi/MUI_HEADERIMAGE.bmp b/nsi/MUI_HEADERIMAGE.bmp
new file mode 100644
index 0000000..2d412f7
Binary files /dev/null and b/nsi/MUI_HEADERIMAGE.bmp differ
diff --git a/nsi/MUI_WELCOMEFINISHPAGE.bmp b/nsi/MUI_WELCOMEFINISHPAGE.bmp
new file mode 100644
index 0000000..00b66ff
Binary files /dev/null and b/nsi/MUI_WELCOMEFINISHPAGE.bmp differ
diff --git a/nsi/QMapShack_Installer.nsi b/nsi/QMapShack_Installer.nsi
index cd1875e..e0ef80d 100644
--- a/nsi/QMapShack_Installer.nsi
+++ b/nsi/QMapShack_Installer.nsi
@@ -19,7 +19,7 @@
 ; 03-Aug-2014 First version of QMapShack installer based on the existing QLandkarteGT installer
 
 ;=================== BEGIN SCRIPT ====================
-; Include for nice Setup UI
+; Include for nice Setup UI, see http://nsis.sourceforge.net/Docs/Modern%20UI%202/Readme.html
 !include MUI2.nsh
 
 ;------------------------------------------------------------------------
@@ -47,14 +47,15 @@ OutFile "QMapShack_Install.exe"
 ;!define MUI_COMPONENTSPAGE_SMALLDESC ;No value
 !define MUI_INSTFILESPAGE_COLORS "FFFFFF 000000" ;Two colors
 
+!define MUI_ICON "QMapShack.ico"
 !define MUI_HEADERIMAGE
-;!define MUI_HEADERIMAGE_BITMAP "logo_small.bmp"
-;!define MUI_WELCOMEFINISHPAGE_BITMAP "logo_big.bmp"
+!define MUI_HEADERIMAGE_BITMAP "MUI_HEADERIMAGE.bmp"
+!define MUI_WELCOMEFINISHPAGE_BITMAP "MUI_WELCOMEFINISHPAGE.bmp"
 
 ; Page welcome description
 !define MUI_WELCOMEPAGE_TITLE "QMapShack"
 !define MUI_WELCOMEPAGE_TITLE_3LINES
-!define MUI_WELCOMEPAGE_TEXT "QMapShack is the successor of QLandkarte GT, based on a different concept. It allows the use of several workspaces and of several maps on a workspace. GIS data is handled  project-oriented and can be exchange with the device by drag-n-drop."
+!define MUI_WELCOMEPAGE_TEXT "QMapShack provides a versatile and fast display of raster and vector maps with visualization of GIS data such as tracks and waypoints. It allows the use of several workspaces and of several maps on a workspace. GIS data is handled project-oriented and can be exchanged with the device by drag-n-drop."
 
 !define MUI_LICENSEPAGE_CHECKBOX
 
@@ -116,13 +117,21 @@ Section "QMapShack" QMapShack
   SetOutPath $INSTDIR
     File Files\Qt5Core.dll
     File Files\Qt5Gui.dll
+	File Files\Qt5Multimedia.dll
+	File Files\Qt5MultimediaWidgets.dll
     File Files\Qt5Network.dll
     File Files\Qt5OpenGL.dll
-    File Files\Qt5Script.dll	
+	File Files\Qt5Positioning.dll
+	File Files\Qt5PrintSupport.dll
+	File Files\Qt5Qml.dll
+	File Files\Qt5Quick.dll
+    File Files\Qt5Script.dll
+	File Files\Qt5Sensors.dll
     File Files\Qt5Sql.dll
     File Files\Qt5Svg.dll
     File Files\Qt5WebKit.dll
-    File Files\Qt5Widgets.dll   
+    File Files\Qt5Widgets.dll 
+    File Files\Qt5WebKitWidgets.dll	
     File Files\Qt5Xml.dll
 	File Files\icudt52.dll
 	File Files\icuin52.dll
@@ -151,6 +160,9 @@ Section "QMapShack" QMapShack
   SetOutPath $INSTDIR
     File Files\gdal*.dll
     File Files\gdal*.exe
+	File Files\nearblack.exe
+	File Files\ogr*.exe
+	File Files\testepsg.exe
   SetOutPath "$INSTDIR\data\"
     File /r Files\data\*.*
   ;END GDAL and PROJ.4 Files        
@@ -182,14 +194,12 @@ LangString DESC_QMapShack ${LANG_GERMAN}  "Landkarten im GeoTiff und Garmin Form
 
 Section "StartMenue" StartMenue
   ;create batch file for a GDAL shell
-  ;fileOpen $0 "$INSTDIR\gdal.bat" w
-  ;fileWrite $0 "cd /D $\"$INSTDIR\gdal\apps$\"$\r$\n" 
-  ;fileWrite $0 "SET PATH=$INSTDIR;$INSTDIR\gdal\python\osgeo;$INSTDIR\proj\apps;$INSTDIR\gdal\apps;$INSTDIR\curl;%PATH%$\r$\n"
-  ;fileWrite $0 "SET GDAL_DATA=$INSTDIR\gdal-data$\r$\n"
-  ;fileWrite $0 "SET GDAL_DRIVER_PATH=$INSTDIR\gdal\plugins$\r$\n"
-  ;fileWrite $0 "SET PYTHONPATH=$INSTDIR\gdal\python;%PYTHONPATH%$\r$\n"
-  ;fileWrite $0 "SET PROJ_LIB=$INSTDIR\proj\SHARE$\r$\n"
-  ;fileClose $0
+  fileOpen $0 "$INSTDIR\gdal_shell.bat" w
+  fileWrite $0 "@cd /D %USERPROFILE%$\r$\n" 
+  fileWrite $0 "@SET PATH=$INSTDIR;%PATH%$\r$\n"
+  fileWrite $0 "@SET GDAL_DATA=$INSTDIR\data$\r$\n"
+  fileWrite $0 "@SET PROJ_LIB=$INSTDIR\share$\r$\n"
+  fileClose $0
 
   !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
      ;Create shortcuts
@@ -198,8 +208,8 @@ Section "StartMenue" StartMenue
     CreateShortCut "$SMPROGRAMS\$StartMenuFolder\QMapShack.lnk" "$INSTDIR\qmapshack.exe" "" "$INSTDIR\QMapShack.ico"
     CreateShortCut "$SMPROGRAMS\$StartMenuFolder\qmapshack.org.lnk" "https://bitbucket.org/maproom/qmapshack/wiki/Home" "" "$INSTDIR\kfm_home.ico"
     CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Help.lnk" "https://bitbucket.org/maproom/qmapshack/wiki/DocMain" "" "$INSTDIR\Help.ico"
-    ;CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Download.lnk" "http://sourceforge.net/projects/qlandkartegt/" "" "$INSTDIR\kget.ico"
-    ;CreateShortCut "$SMPROGRAMS\$StartMenuFolder\GDAL.lnk" %COMSPEC% "/k $\"$INSTDIR\gdal.bat$\""
+    CreateShortCut "$SMPROGRAMS\$StartMenuFolder\gdal.org.lnk" "http://www.gdal.org/" "" "$INSTDIR\gdalicon.ico"
+    CreateShortCut "$SMPROGRAMS\$StartMenuFolder\GDAL shell.lnk" %COMSPEC% "/k $\"$INSTDIR\gdal_shell.bat$\"" "" "" "" "" "GDAL shell"
    !insertmacro MUI_STARTMENU_WRITE_END
 
   ;Create registry entries
@@ -237,8 +247,8 @@ Section "Uninstall"
   Delete "$SMPROGRAMS\$StartMenuFolder\QMapShack.lnk"
   Delete "$SMPROGRAMS\$StartMenuFolder\qmapshack.org.lnk"
   Delete "$SMPROGRAMS\$StartMenuFolder\Help.lnk"
-  ;Delete "$SMPROGRAMS\$StartMenuFolder\Download.lnk"
-  ;Delete "$SMPROGRAMS\$StartMenuFolder\GDAL.lnk"
+  Delete "$SMPROGRAMS\$StartMenuFolder\gdal.org.lnk"
+  Delete "$SMPROGRAMS\$StartMenuFolder\GDAL shell.lnk"
   
   RMDir "$SMPROGRAMS\$StartMenuFolder"
 
diff --git a/nsi/copyfiles.bat b/nsi/copyfiles.bat
index 6813588..c77dc9f 100644
--- a/nsi/copyfiles.bat
+++ b/nsi/copyfiles.bat
@@ -20,12 +20,20 @@ cd Files
 rem Section 2.1) Copy Qt files
 copy %QMSI_QT_PATH%\bin\Qt5Core.dll
 copy %QMSI_QT_PATH%\bin\Qt5Gui.dll
+copy %QMSI_QT_PATH%\bin\Qt5Multimedia.dll
+copy %QMSI_QT_PATH%\bin\Qt5MultimediaWidgets.dll
 copy %QMSI_QT_PATH%\bin\Qt5Network.dll
 copy %QMSI_QT_PATH%\bin\Qt5OpenGL.dll
+copy %QMSI_QT_PATH%\bin\Qt5Positioning.dll
+copy %QMSI_QT_PATH%\bin\Qt5PrintSupport.dll
+copy %QMSI_QT_PATH%\bin\Qt5Qml.dll
+copy %QMSI_QT_PATH%\bin\Qt5Quick.dll
 copy %QMSI_QT_PATH%\bin\Qt5Script.dll
+copy %QMSI_QT_PATH%\bin\Qt5Sensors.dll
 copy %QMSI_QT_PATH%\bin\Qt5Sql.dll
 copy %QMSI_QT_PATH%\bin\Qt5Svg.dll
 copy %QMSI_QT_PATH%\bin\Qt5WebKit.dll
+copy %QMSI_QT_PATH%\bin\Qt5WebKitWidgets.dll
 copy %QMSI_QT_PATH%\bin\Qt5Widgets.dll
 copy %QMSI_QT_PATH%\bin\Qt5Xml.dll
 copy %QMSI_QT_PATH%\bin\icudt52.dll
@@ -62,10 +70,7 @@ rem   put them in the same directory as the .exe for better testing
 rem section 2.2.1) GDAL
 xcopy %QMSI_GDAL_PATH%\data data /s /i
 copy %QMSI_GDAL_PATH%\bin\*.dll
-rem ?? Which GDAL executables do we need ??
-copy %QMSI_GDAL_PATH%\bin\gdalinfo.exe
-copy %QMSI_GDAL_PATH%\bin\gdal_translate.exe
-copy %QMSI_GDAL_PATH%\bin\gdalwarp.exe
+copy %QMSI_GDAL_PATH%\bin\*.exe
 rem section 2.2.4) PROJ.4
 xcopy %QMSI_PROJ_PATH%\share share /s /i
 copy %QMSI_PROJ_PATH%\bin\*.dll
@@ -78,8 +83,6 @@ rem copy %QLGTI_LIBEXIF_PATH%\libexif-12.dll
 rem section 2.5) Copy QMapShack GT Files
 copy ..\..\build\bin\Release\qmapshack.exe
 copy ..\..\build\src\*.qm
-rem copy ..\..\src\icons\48x48\QMapShack.png
-rem copy ..\..\src\icons\48x48\Help.png
 copy ..\*.ico
 rem section 2.6) 3rd party SW description
 copy ..\3rdparty.txt
diff --git a/nsi/gdalicon.ico b/nsi/gdalicon.ico
new file mode 100644
index 0000000..f999882
Binary files /dev/null and b/nsi/gdalicon.ico differ
diff --git a/nsi/konsole.ico b/nsi/konsole.ico
deleted file mode 100644
index a4e60cc..0000000
Binary files a/nsi/konsole.ico and /dev/null differ
diff --git a/src/CMainWindow.cpp b/src/CMainWindow.cpp
index 9dc3fba..205cc04 100644
--- a/src/CMainWindow.cpp
+++ b/src/CMainWindow.cpp
@@ -230,6 +230,15 @@ void CMainWindow::addDemList(CDemList * list, const QString &name)
     tabDem->addTab(list,name);
 }
 
+void CMainWindow::addWidgetToTab(QWidget * w)
+{
+    if(tabWidget->indexOf(w) == -1)
+    {
+        tabWidget->addTab(w, w->objectName());
+    }
+    tabWidget->setCurrentWidget(w);
+}
+
 CCanvas * CMainWindow::getVisibleCanvas()
 {
     return dynamic_cast<CCanvas*>(tabWidget->currentWidget());
@@ -254,6 +263,28 @@ qreal CMainWindow::getEelevationAt(const QPointF& pos)
     return NOFLOAT;
 }
 
+void  CMainWindow::getEelevationAt(const QPolygonF &pos, QPolygonF& ele)
+{
+    CCanvas * canvas = getVisibleCanvas();
+    if(canvas)
+    {
+        canvas->getElevationAt(pos, ele);
+    }
+    else
+    {
+        for(int i = 0; i < tabWidget->count(); i++)
+        {
+            canvas = dynamic_cast<CCanvas*>(tabWidget->widget(i));
+            if(canvas)
+            {
+                canvas->getElevationAt(pos, ele);
+                return;
+            }
+        }
+        ele.clear();
+    }
+}
+
 void CMainWindow::slotAbout()
 {
     CAbout dlg(this);
diff --git a/src/CMainWindow.h b/src/CMainWindow.h
index c1b23f3..d742c73 100644
--- a/src/CMainWindow.h
+++ b/src/CMainWindow.h
@@ -37,6 +37,7 @@ class CMainWindow : public QMainWindow, private Ui::IMainWindow
 
         void addMapList(CMapList *list, const QString& name);
         void addDemList(CDemList *list, const QString& name);
+        void addWidgetToTab(QWidget * w);
 
         bool isScaleVisible();
         bool isGridVisible();
@@ -53,12 +54,14 @@ class CMainWindow : public QMainWindow, private Ui::IMainWindow
            @return If no elevation value can be found for the position NOFLOAT is returned.
          */
         qreal getEelevationAt(const QPointF &pos);
+        void  getEelevationAt(const QPolygonF& pos, QPolygonF &ele);
         /**
            @brief Get pointer to the currently visibale canvas object.
            @return If the currently visible tab does not contain a CCanvas object 0 is returned.
         */
         CCanvas * getVisibleCanvas();
 
+
     private slots:
         void slotAbout();
         void slotHelp();
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4466ce5..3c3035a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -22,6 +22,7 @@ set( SRCS
     helpers/CPositionDialog.cpp
     helpers/CWptIconDialog.cpp
     helpers/CTextEditWidget.cpp
+    helpers/CSelectProjectDialog.cpp
     canvas/CCanvas.cpp
     canvas/CCanvasSetup.cpp
     canvas/IDrawContext.cpp
@@ -44,6 +45,7 @@ set( SRCS
     map/CMapIMG.cpp
     map/CMapMAP.cpp
     map/CMapVRT.cpp
+    map/CMapWMTS.cpp
     map/CMapPathSetup.cpp    
     map/CMapPropSetup.cpp
     map/garmin/IGarminStrTbl.cpp
@@ -53,6 +55,9 @@ set( SRCS
     map/garmin/CGarminPoint.cpp
     map/garmin/CGarminPolygon.cpp
     map/garmin/CGarminTyp.cpp
+    map/wmts/CDiskCache.cpp
+    map/wmts/IDiskCache.cpp
+    map/mapsforge/types.cpp
     units/IUnit.cpp
     units/CUnitImperial.cpp
     units/CUnitMetric.cpp
@@ -63,13 +68,20 @@ set( SRCS
     grid/CProjWizard.cpp
     grid/mitab.cpp
     mouse/IMouse.cpp
+    mouse/IMouseEditLine.cpp
     mouse/IScrOpt.cpp
     mouse/CMouseNormal.cpp
     mouse/CMouseMoveWpt.cpp
+    mouse/CMouseEditTrk.cpp
+    mouse/CMouseEditArea.cpp
     mouse/CScrOptUnclutter.cpp    
+    mouse/CScrOptPoint.cpp
+    mouse/CScrOptEditLine.cpp
+    mouse/CScrOptRange.cpp
     gis/WptIcons.cpp
     gis/CGisDraw.cpp
     gis/IGisItem.cpp
+    gis/IGisLine.cpp
     gis/wpt/CGisItemWpt.cpp
     gis/wpt/CScrOptWpt.cpp
     gis/wpt/CDetailsWpt.cpp
@@ -77,12 +89,24 @@ set( SRCS
     gis/wpt/CProjWpt.cpp
     gis/trk/CGisItemTrk.cpp
     gis/trk/CScrOptTrk.cpp
+    gis/trk/CDetailsTrk.cpp
     gis/rte/CGisItemRte.cpp
     gis/rte/CScrOptRte.cpp
+    gis/ovl/CGisItemOvlArea.cpp
+    gis/ovl/CScrOptOvlArea.cpp
+    gis/ovl/CDetailsOvlArea.cpp
     gis/CGisWidget.cpp
     gis/CGisListDB.cpp
     gis/CGisListWks.cpp
-    gis/CGisProject.cpp    
+    gis/CGisProject.cpp
+    plot/IPlot.cpp
+    plot/CPlotAxis.cpp
+    plot/CPlotAxisTime.cpp    
+    plot/CPlotData.cpp
+    plot/CPlotProfile.cpp
+    plot/CPlotSpeed.cpp
+    plot/CPlotDistance.cpp
+    plot/CPlotTrack.cpp
 )
 
 set( HDRS
@@ -99,6 +123,7 @@ set( HDRS
     helpers/CPositionDialog.h
     helpers/CWptIconDialog.h
     helpers/CTextEditWidget.h
+    helpers/CSelectProjectDialog.h
     canvas/CCanvas.h
     canvas/CCanvasSetup.h
     canvas/IDrawContext.h
@@ -121,6 +146,7 @@ set( HDRS
     map/CMapIMG.h
     map/CMapMAP.h
     map/CMapVRT.h
+    map/CMapWMTS.h
     map/CMapPathSetup.h
     map/CMapPropSetup.h    
     map/garmin/Garmin.h
@@ -131,6 +157,9 @@ set( HDRS
     map/garmin/CGarminPoint.h
     map/garmin/CGarminPolygon.h
     map/garmin/CGarminTyp.h
+    map/wmts/CDiskCache.h
+    map/wmts/IDiskCache.h
+    map/mapsforge/types.h
     units/IUnit.h
     units/CUnitImperial.h
     units/CUnitMetric.h
@@ -141,13 +170,20 @@ set( HDRS
     grid/CProjWizard.h
     grid/mitab.h
     mouse/IMouse.h
+    mouse/IMouseEditLine.h
     mouse/IScrOpt.h
     mouse/CMouseNormal.h
     mouse/CMouseMoveWpt.h
-    mouse/CScrOptUnclutter.h    
+    mouse/CMouseEditTrk.h
+    mouse/CMouseEditArea.h
+    mouse/CScrOptUnclutter.h
+    mouse/CScrOptPoint.h
+    mouse/CScrOptEditLine.h
+    mouse/CScrOptRange.h
     gis/WptIcons.h
     gis/CGisDraw.h
     gis/IGisItem.h
+    gis/IGisLine.h
     gis/wpt/CGisItemWpt.h
     gis/wpt/CScrOptWpt.h
     gis/wpt/CDetailsWpt.h
@@ -155,12 +191,24 @@ set( HDRS
     gis/wpt/CProjWpt.h
     gis/trk/CGisItemTrk.h
     gis/trk/CScrOptTrk.h
+    gis/trk/CDetailsTrk.cpp
     gis/rte/CGisItemRte.h
     gis/rte/CScrOptRte.h
+    gis/ovl/CGisItemOvlArea.h
+    gis/ovl/CScrOptOvlArea.h
+    gis/ovl/CDetailsOvlArea.h
     gis/CGisWidget.h
     gis/CGisListDB.h
     gis/CGisListWks.h
     gis/CGisProject.h    
+    plot/IPlot.h
+    plot/CPlotAxis.h
+    plot/CPlotAxisTime.h
+    plot/CPlotData.h
+    plot/CPlotProfile.h
+    plot/CPlotSpeed.h
+    plot/CPlotDistance.h
+    plot/CPlotTrack.h
 )
 
 set( UIS
@@ -170,6 +218,7 @@ set( UIS
     helpers/IPositionDialog.ui
     helpers/IWptIconDialog.ui
     helpers/ITextEditWidget.ui
+    helpers/ISelectProjectDialog.ui
     canvas/ICanvasSetup.ui
     dem/IDemList.ui
     dem/IDemPathSetup.ui
@@ -179,13 +228,19 @@ set( UIS
     map/IMapPropSetup.ui
     grid/IGridSetup.ui
     grid/IProjWizard.ui
+    mouse/IScrOptPoint.ui
+    mouse/IScrOptEditLine.ui
+    mouse/IScrOptRange.ui
     gis/IGisWidget.ui
     gis/wpt/IScrOptWpt.ui
     gis/wpt/IDetailsWpt.ui
     gis/wpt/IDetailsGeoCache.ui
     gis/wpt/IProjWpt.ui
     gis/trk/IScrOptTrk.ui
+    gis/trk/IDetailsTrk.ui
     gis/rte/IScrOptRte.ui
+    gis/ovl/IScrOptOvlArea.ui
+    gis/ovl/IDetailsOvlArea.ui
     units/ITimeZoneSetup.ui
 )
 
diff --git a/src/IAbout.ui b/src/IAbout.ui
index 8afc92c..9333477 100644
--- a/src/IAbout.ui
+++ b/src/IAbout.ui
@@ -6,135 +6,158 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>402</width>
-    <height>239</height>
+    <width>513</width>
+    <height>258</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>About....</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string/>
+     </property>
+     <property name="pixmap">
+      <pixmap resource="resources.qrc">:/pics/about.png</pixmap>
+     </property>
+     <property name="scaledContents">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout">
      <item>
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string/>
-       </property>
-       <property name="pixmap">
-        <pixmap resource="resources.qrc">:/icons/48x48/QMapShack.png</pixmap>
-       </property>
-      </widget>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <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><b>QMapShack</b>, Version</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="labelVersion">
+         <property name="text">
+          <string>TextLabel</string>
+         </property>
+        </widget>
+       </item>
+       <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/>
+         </property>
+         <property name="pixmap">
+          <pixmap resource="resources.qrc">:/icons/48x48/QMapShack.png</pixmap>
+         </property>
+        </widget>
+       </item>
+      </layout>
      </item>
      <item>
-      <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><b>QMapShack</b>, Version</string>
+      <widget class="Line" name="line">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
        </property>
       </widget>
      </item>
      <item>
-      <widget class="QLabel" name="labelVersion">
-       <property name="text">
-        <string>TextLabel</string>
+      <layout class="QFormLayout" name="formLayout">
+       <property name="fieldGrowthPolicy">
+        <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
        </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="Line" name="line">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <layout class="QFormLayout" name="formLayout">
-     <property name="fieldGrowthPolicy">
-      <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
-     </property>
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_4">
-       <property name="text">
-        <string>Qt</string>
-       </property>
-      </widget>
+       <item row="0" column="0">
+        <widget class="QLabel" name="label_4">
+         <property name="text">
+          <string>Qt</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QLabel" name="labelQtVersion">
+         <property name="text">
+          <string>TextLabel</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_5">
+         <property name="text">
+          <string>GDAL</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QLabel" name="labelGDALVersion">
+         <property name="text">
+          <string>TextLabel</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_6">
+         <property name="text">
+          <string>Proj4</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1">
+        <widget class="QLabel" name="labelProj4Version">
+         <property name="text">
+          <string>TextLabel</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
      </item>
-     <item row="0" column="1">
-      <widget class="QLabel" name="labelQtVersion">
-       <property name="text">
-        <string>TextLabel</string>
+     <item>
+      <widget class="Line" name="line_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
        </property>
       </widget>
      </item>
-     <item row="1" column="0">
-      <widget class="QLabel" name="label_5">
+     <item>
+      <widget class="QLabel" name="label_11">
        <property name="text">
-        <string>GDAL</string>
+        <string>This software is licensed under GPL3 or any later version</string>
        </property>
       </widget>
      </item>
-     <item row="1" column="1">
-      <widget class="QLabel" name="labelGDALVersion">
+     <item>
+      <widget class="QLabel" name="label_7">
        <property name="text">
-        <string>TextLabel</string>
+        <string>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
-      <widget class="QLabel" name="label_6">
-       <property name="text">
-        <string>Proj4</string>
+     <item>
+      <widget class="QDialogButtonBox" name="buttonBox">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
        </property>
-      </widget>
-     </item>
-     <item row="2" column="1">
-      <widget class="QLabel" name="labelProj4Version">
-       <property name="text">
-        <string>TextLabel</string>
+       <property name="standardButtons">
+        <set>QDialogButtonBox::Close</set>
        </property>
       </widget>
      </item>
     </layout>
    </item>
-   <item>
-    <widget class="Line" name="line_2">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="label_11">
-     <property name="text">
-      <string>This software is licensed under GPL3 or any later version</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="label_7">
-     <property name="text">
-      <string>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Close</set>
-     </property>
-    </widget>
-   </item>
   </layout>
  </widget>
  <resources>
diff --git a/src/canvas/CCanvas.cpp b/src/canvas/CCanvas.cpp
index 8c0f05f..d14a1ed 100644
--- a/src/canvas/CCanvas.cpp
+++ b/src/canvas/CCanvas.cpp
@@ -27,7 +27,13 @@
 #include "units/IUnit.h"
 #include "mouse/CMouseNormal.h"
 #include "mouse/CMouseMoveWpt.h"
+#include "mouse/CMouseEditTrk.h"
+#include "mouse/CMouseEditArea.h"
+#include "gis/CGisWidget.h"
 #include "gis/CGisDraw.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/ovl/CGisItemOvlArea.h"
+#include "plot/CPlotProfile.h"
 
 
 #include <QtWidgets>
@@ -42,6 +48,7 @@ QBrush CCanvas::brushBackYellow(QColor(0xff, 0xff, 0xcc, 0xE0));
 CCanvas::CCanvas(QWidget *parent)
     : QWidget(parent)
     , posFocus(12.00 * DEG_TO_RAD, 49.00 * DEG_TO_RAD)
+    , plotTrackProfile(0)
 {
     setFocusPolicy(Qt::WheelFocus);
 
@@ -87,6 +94,8 @@ CCanvas::CCanvas(QWidget *parent)
     loadIndicator2->start();
     demLoadIndicator->show();
 
+    labelStatusMessages = new QLabel(this);
+    labelStatusMessages->hide();
 
 
     connect(map, SIGNAL(sigStartThread()), mapLoadIndicator, SLOT(show()));
@@ -94,6 +103,12 @@ CCanvas::CCanvas(QWidget *parent)
 
     connect(dem, SIGNAL(sigStartThread()), demLoadIndicator, SLOT(show()));
     connect(dem, SIGNAL(sigStopThread()), demLoadIndicator, SLOT(hide()));
+
+    timerTrackOnFocus = new QTimer(this);
+    timerTrackOnFocus->setSingleShot(false);
+    timerTrackOnFocus->start(1000);
+
+    connect(timerTrackOnFocus, SIGNAL(timeout()), this, SLOT(slotCheckTrackOnFocus()));
 }
 
 CCanvas::~CCanvas()
@@ -144,6 +159,83 @@ void CCanvas::setMouseMoveWpt(CGisItemWpt& wpt)
     }
 }
 
+void CCanvas::setMouseEditTrk(const QPointF &pt)
+{
+    mouse->deleteLater();
+    mouse = new CMouseEditTrk(pt, gis, this);
+    if(underMouse())
+    {
+        QApplication::restoreOverrideCursor();
+        QApplication::setOverrideCursor(*mouse);
+    }
+}
+
+void CCanvas::setMouseEditTrk(CGisItemTrk& trk)
+{
+    mouse->deleteLater();
+    mouse = new CMouseEditTrk(trk, gis, this);
+    if(underMouse())
+    {
+        QApplication::restoreOverrideCursor();
+        QApplication::setOverrideCursor(*mouse);
+    }
+}
+
+void CCanvas::setMouseEditArea(const QPointF& pt)
+{
+    mouse->deleteLater();
+    mouse = new CMouseEditArea(pt, gis, this);
+    if(underMouse())
+    {
+        QApplication::restoreOverrideCursor();
+        QApplication::setOverrideCursor(*mouse);
+    }
+}
+
+void CCanvas::setMouseEditArea(CGisItemOvlArea& area)
+{
+    mouse->deleteLater();
+    mouse = new CMouseEditArea(area, gis, this);
+    if(underMouse())
+    {
+        QApplication::restoreOverrideCursor();
+        QApplication::setOverrideCursor(*mouse);
+    }
+}
+
+
+
+void CCanvas::reportStatus(const QString& key, const QString& msg)
+{
+    if(msg.isEmpty())
+    {
+        statusMessages.remove(key);
+    }
+    else
+    {
+        statusMessages[key] = msg;
+    }
+
+    QString report;
+    QStringList keys = statusMessages.keys();
+    keys.sort();
+    foreach(const QString& key, keys)
+    {
+        report += statusMessages[key] + "\n";
+    }
+
+    if(report.isEmpty())
+    {
+        labelStatusMessages->hide();
+    }
+    else
+    {
+        labelStatusMessages->show();
+        labelStatusMessages->setText(report);
+        labelStatusMessages->adjustSize();
+        update();
+    }
+}
 
 void CCanvas::resizeEvent(QResizeEvent * e)
 {
@@ -162,6 +254,22 @@ void CCanvas::resizeEvent(QResizeEvent * e)
 
     QPoint p2(demLoadIndicator->width()>>1, demLoadIndicator->height()>>1);
     demLoadIndicator->move(rect().center() - p2);
+
+    labelStatusMessages->move(20,20);
+
+    if(plotTrackProfile)
+    {
+        if(s.height() < 700)
+        {
+            plotTrackProfile->resize(200,80);
+        }
+        else
+        {
+            plotTrackProfile->resize(300,120);
+        }
+
+        plotTrackProfile->move(20, height() - plotTrackProfile->height() - 20);
+    }
 }
 
 void CCanvas::paintEvent(QPaintEvent * e)
@@ -182,21 +290,23 @@ void CCanvas::paintEvent(QPaintEvent * e)
     // fill the backbround with default pattern
     p.fillRect(rect(), "#FFFFBF");
 
-    // ----- start to draw geo-referenced content -----
+    // ----- start to draw thread based content -----
     // 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);
+    gis->draw(p, needsRedraw, posFocus, r);   
 
     // restore coordinate system to default
     p.resetTransform();
-    // ----- start to draw static content -----
+    // ----- start to draw fast content -----
 
     grid->draw(p, rect());
-    mouse->draw(p, rect());
+    mouse->draw(p, needsRedraw, rect());
+    gis->draw(p, rect());
 
+    drawStatusMessages(p);
     drawScale(p);
 
     p.end();
@@ -215,7 +325,7 @@ void CCanvas::mouseMoveEvent(QMouseEvent * e)
     qreal ele = NOFLOAT;
     QPointF pos = e->pos();
     map->convertPx2Rad(pos);
-    ele = dem->getEelevationAt(pos);
+    ele = dem->getElevationAt(pos);
     emit sigMousePosition(pos * RAD_TO_DEG, ele);
 
     mouse->mouseMoveEvent(e);
@@ -252,16 +362,21 @@ void CCanvas::enterEvent(QEvent * e)
     Q_UNUSED(e);
     QApplication::setOverrideCursor(*mouse);
 
-    setMouseTracking(true);
+    mouse->setMouseTracking(true);
 }
 
 
 void CCanvas::leaveEvent(QEvent * e)
 {
     Q_UNUSED(e);
+    // bad hack to stop bad number of overide cursors.
+    QApplication::restoreOverrideCursor();
     QApplication::restoreOverrideCursor();
+    QApplication::restoreOverrideCursor();
+    QApplication::restoreOverrideCursor();
+
 
-    setMouseTracking(false);
+    mouse->setMouseTracking(false);
 }
 
 void CCanvas::keyPressEvent(QKeyEvent * e)
@@ -365,6 +480,19 @@ void CCanvas::drawText(const QString& str, QPainter& p, const QRect& r, const QC
 
 }
 
+void CCanvas::drawStatusMessages(QPainter& p)
+{
+    if(labelStatusMessages->isVisible())
+    {
+        QRect r = labelStatusMessages->rect();
+        r.adjust(-5, -5, 5, 5);
+        r.moveTopLeft(QPoint(15,15));
+        p.setPen(CCanvas::penBorderGray);
+        p.setBrush(CCanvas::brushBackWhite);
+        p.drawRoundedRect(r, 5, 5);
+    }
+}
+
 void CCanvas::drawScale(QPainter& p)
 {
 
@@ -450,6 +578,42 @@ void CCanvas::slotToolTip()
     QToolTip::showText(p,str);
 }
 
+void CCanvas::slotCheckTrackOnFocus()
+{
+    const QString& key = CGisItemTrk::getKeyUserFocus();
+
+    // any changes?
+    if(key != keyTrackOnFocus)
+    {
+        // get access to current track object
+        delete plotTrackProfile;
+        keyTrackOnFocus.clear();
+
+        // get access to next track object
+        CGisItemTrk * trk2 = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+        if(trk2 == 0)
+        {
+            return;
+        }
+
+        // create new profile plot, the plot will register itself at the track
+        plotTrackProfile = new CPlotProfile(trk2, IPlot::eModeIcon, this);
+        if(height() < 700)
+        {
+            plotTrackProfile->resize(200,80);
+        }
+        else
+        {
+            plotTrackProfile->resize(300,120);
+        }
+        plotTrackProfile->move(20, height() - plotTrackProfile->height() - 20);
+        plotTrackProfile->show();
+
+        // finally store the new key as track on focus
+        keyTrackOnFocus = key;
+    }
+}
+
 void CCanvas::moveMap(const QPointF& delta)
 {
     map->convertRad2Px(posFocus);
@@ -512,7 +676,12 @@ void CCanvas::setProjection(const QString& proj)
 
 qreal CCanvas::getElevationAt(const QPointF& pos)
 {
-    return dem->getEelevationAt(pos);
+    return dem->getElevationAt(pos);
+}
+
+void CCanvas::getElevationAt(const QPolygonF& pos, QPolygonF& ele)
+{
+    return dem->getElevationAt(pos, ele);
 }
 
 void CCanvas::setZoom(bool in, redraw_e& needsRedraw)
diff --git a/src/canvas/CCanvas.h b/src/canvas/CCanvas.h
index 2f58d50..dccb87d 100644
--- a/src/canvas/CCanvas.h
+++ b/src/canvas/CCanvas.h
@@ -21,17 +21,23 @@
 
 #include <QWidget>
 #include <QPainter>
+#include <QPointer>
+#include <QMap>
+
 class CMapDraw;
 class CGrid;
 class CDemDraw;
 class CGisDraw;
 class CGisItemWpt;
+class CGisItemTrk;
+class CGisItemOvlArea;
 class QSettings;
 class QPointF;
 class IMouse;
 class QTimer;
 class QMovie;
 class QLabel;
+class IPlot;
 
 inline  void USE_ANTI_ALIASING(QPainter& p, bool useAntiAliasing)
 {
@@ -66,6 +72,7 @@ class CCanvas : public QWidget
         QString getProjection();
         void  setProjection(const QString& proj);
         qreal getElevationAt(const QPointF &pos);
+        void  getElevationAt(const QPolygonF& pos, QPolygonF &ele);
 
         void moveMap(const QPointF &delta);
         void zoomTo(const QRectF& rect);
@@ -92,6 +99,23 @@ class CCanvas : public QWidget
 
         void resetMouse();
         void setMouseMoveWpt(CGisItemWpt& wpt);
+        void setMouseEditTrk(CGisItemTrk& trk);
+        void setMouseEditTrk(const QPointF& pt);        
+        void setMouseEditArea(CGisItemOvlArea& area);
+        void setMouseEditArea(const QPointF& pt);
+
+        /**
+           @brief Add a message by key to be reported on the canvas
+
+           Messages from various sources will be collected in a list and displayed in the top left corner
+           of the widget.
+
+           @note The object reporting has to take care to remove the message by reporting an empty string.
+
+           @param key   the key to identify the reporting object
+           @param msg   the message to report
+         */
+        void reportStatus(const QString& key, const QString& msg);
 
     signals:
         void sigMousePosition(const QPointF& pos, qreal ele);
@@ -113,8 +137,10 @@ class CCanvas : public QWidget
 
     private slots:
         void slotToolTip();
+        void slotCheckTrackOnFocus();
 
     private:
+        void drawStatusMessages(QPainter& p);
         void drawScale(QPainter& p);
         void setZoom(bool in, redraw_e &needsRedraw);
 
@@ -122,14 +148,12 @@ class CCanvas : public QWidget
         redraw_e needsRedraw;
         /// the map object attached to this canvas
         CMapDraw * map;
-
-        /// the grid attached to this canvas
-        CGrid * grid;
-
+        /// the elevation data layer attached to this canvas
         CDemDraw * dem;
-
+        /// the GIS data layer attached to this convas
         CGisDraw * gis;
-
+        /// the grid attached to this canvas
+        CGrid * grid;
         /// the current point of focus (usually the canvas center)
         QPointF posFocus;
 
@@ -138,16 +162,26 @@ class CCanvas : public QWidget
 
         /// tool tip timer for vector map tool tips
         QTimer * timerToolTip;
-
         /// the position of the tool tip
         QPoint posToolTip;
 
+        /// load indicator for maps
         QMovie * loadIndicator1;
         QLabel * mapLoadIndicator;
 
+        /// load indicator for DEM
         QMovie * loadIndicator2;
         QLabel * demLoadIndicator;
 
+        /// timer to poll for track gaining/loosing focus
+        QTimer * timerTrackOnFocus;
+        /// the key of the currentl focused track
+        QString keyTrackOnFocus;
+        /// the track profile plot
+        QPointer<IPlot>  plotTrackProfile;
+
+        QLabel * labelStatusMessages;
+        QMap<QString, QString> statusMessages;
 };
 
 #endif //CCANVAS_H
diff --git a/src/canvas/IDrawContext.h b/src/canvas/IDrawContext.h
index d7db116..260b2ae 100644
--- a/src/canvas/IDrawContext.h
+++ b/src/canvas/IDrawContext.h
@@ -113,7 +113,6 @@ 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);
 
         /**
diff --git a/src/canvas/IDrawObject.cpp b/src/canvas/IDrawObject.cpp
index 113483c..3bffae1 100644
--- a/src/canvas/IDrawObject.cpp
+++ b/src/canvas/IDrawObject.cpp
@@ -29,6 +29,9 @@ IDrawObject::IDrawObject(QObject *parent)
     , showPolygons(true)
     , showPolylines(true)
     , showPOIs(true)
+    , cachePath(QDir::home().absoluteFilePath(".QMapShack"))
+    , cacheSizeMB(100)
+    , cacheExpiration(8)
 {
 
 }
@@ -46,6 +49,9 @@ void IDrawObject::saveConfig(QSettings& cfg)
     cfg.setValue("showPolygons", getShowPolygons());
     cfg.setValue("showPolylines", getShowPolylines());
     cfg.setValue("showPOIs", getShowPOIs());
+    cfg.setValue("cachePath", cachePath);
+    cfg.setValue("cacheSizeMB", cacheSizeMB);
+    cfg.setValue("cacheExpiration", cacheExpiration);
 }
 
 void IDrawObject::loadConfig(QSettings& cfg)
@@ -56,6 +62,9 @@ void IDrawObject::loadConfig(QSettings& cfg)
     slotSetShowPolygons(cfg.value("showPolygons", getShowPolygons()).toBool());
     slotSetShowPolylines(cfg.value("showPolylines", getShowPolylines()).toBool());
     slotSetShowPOIs(cfg.value("showPOIs", getShowPOIs()).toBool());
+    slotSetCachePath(cfg.value("cachePath", getCachePath()).toString());
+    slotSetCacheSize(cfg.value("cacheSizeMB", getCacheSize()).toInt());
+    slotSetCacheExpiration(cfg.value("cacheExpiration", getCacheExpiration()).toInt());
 
     emit sigPropertiesChanged();
 }
@@ -75,6 +84,10 @@ bool IDrawObject::isOutOfScale(const QPointF& scale)
     return false;
 }
 
+void IDrawObject::getLayers(QListWidget& list)
+{
+    list.clear();
+}
 
 void IDrawObject::setMinScale(qreal s)
 {
diff --git a/src/canvas/IDrawObject.h b/src/canvas/IDrawObject.h
index 49f1e5d..8f240b5 100644
--- a/src/canvas/IDrawObject.h
+++ b/src/canvas/IDrawObject.h
@@ -22,6 +22,7 @@
 #include <QObject>
 
 class QSettings;
+class QListWidget;
 
 class IDrawObject : public QObject
 {
@@ -67,6 +68,30 @@ class IDrawObject : public QObject
 
         bool getShowPOIs(){return showPOIs;}
 
+        const QString& getCachePath(){return cachePath;}
+
+        qint32 getCacheSize(){return cacheSizeMB;}
+
+        qint32 getCacheExpiration(){return cacheExpiration;}
+
+        /**
+           @brief Get QListWidgetItems to enable/disable map layers.
+
+           As this property is a bit more complex the idea is to reimplement the method
+           if the map type has layers. The implementation probably will clear the list
+           and insert a checkable list widget item into the list. Additionally it will
+           connect to the QListWidget's signals to be noticed by a change.
+
+           Different to other properties, that will get queried when ever the property
+           widget think it needs an update, getLayers() will only be called once uppon
+           property widget creation.
+
+           The default implementation will simply clear the list.
+
+           @param list
+         */
+        virtual void getLayers(QListWidget& list);
+
     public slots:
         /**
            @brief Write opacity value
@@ -78,6 +103,10 @@ class IDrawObject : public QObject
         void slotSetShowPolylines(bool yes){showPolylines = yes;}
         void slotSetShowPOIs(bool yes){showPOIs = yes;}
 
+        void slotSetCachePath(const QString& path){cachePath = path; configureCache();}
+        void slotSetCacheSize(qint32 size){cacheSizeMB = size; configureCache();}
+        void slotSetCacheExpiration(qint32 days){cacheExpiration = days; configureCache();}
+
     signals:
         /**
            @brief Emitted every time a property of the object is changed
@@ -92,20 +121,36 @@ class IDrawObject : public QObject
          */
         bool isOutOfScale(const QPointF& scale);
 
+        /**
+           @brief Setup a map cache using cachePath, cacheSizeMB and cacheExpiration
+
+           The default implementation does noting. Streaming maps will probably override
+           it to reconfigure their cache. The method is called when ever a cache property is
+           changed.
+         */
+        virtual void configureCache(){}
 
     private:
+        /// the opacity level of a map
         qreal opacity;
-
+        /// the minimum scale a map is visible
         qreal minScale;
-
+        /// the maximum scale a map is visible
         qreal maxScale;
-
+        /// vector maps only: hide/show polygons
         bool showPolygons;
-
+        /// vector maps only: hide/show polylines
         bool showPolylines;
-
+        /// vector maps only: hide/show point of interest
         bool showPOIs;
 
+        /// streaming map only: path to cached tiles
+        QString cachePath;
+        /// streaming map only: maximum size of all tiles in cache [MByte]
+        qint32 cacheSizeMB;
+        /// streaming map only: maximum age of tiles in cache [days]
+        qint32 cacheExpiration;
+
 };
 
 #endif //IDRAWOBJECT_H
diff --git a/src/cursors/cursorAdd.png b/src/cursors/cursorAdd.png
new file mode 100644
index 0000000..c00b27d
Binary files /dev/null and b/src/cursors/cursorAdd.png differ
diff --git a/src/cursors/cursorMoveArea.png b/src/cursors/cursorMoveArea.png
new file mode 100644
index 0000000..fd1a942
Binary files /dev/null and b/src/cursors/cursorMoveArea.png differ
diff --git a/src/cursors/cursorMoveLine.png b/src/cursors/cursorMoveLine.png
new file mode 100644
index 0000000..0a20ee2
Binary files /dev/null and b/src/cursors/cursorMoveLine.png differ
diff --git a/src/cursors/cursorSelectRange.png b/src/cursors/cursorSelectRange.png
new file mode 100644
index 0000000..0741d16
Binary files /dev/null and b/src/cursors/cursorSelectRange.png differ
diff --git a/src/dem/CDemDraw.cpp b/src/dem/CDemDraw.cpp
index da9a86f..66e1b77 100644
--- a/src/dem/CDemDraw.cpp
+++ b/src/dem/CDemDraw.cpp
@@ -211,7 +211,7 @@ void CDemDraw::restoreActiveMapsList(const QStringList& keys)
 }
 
 
-qreal CDemDraw::getEelevationAt(const QPointF& pos)
+qreal CDemDraw::getElevationAt(const QPointF& pos)
 {
     qreal ele = NOFLOAT;
     if(CDemItem::mutexActiveDems.tryLock())
@@ -230,7 +230,7 @@ qreal CDemDraw::getEelevationAt(const QPointF& pos)
                     break;
                 }
 
-                ele = item->demfile->getEelevationAt(pos);
+                ele = item->demfile->getElevationAt(pos);
                 if(ele != NOFLOAT)
                 {
                     break;
@@ -243,6 +243,14 @@ qreal CDemDraw::getEelevationAt(const QPointF& pos)
     return ele;
 }
 
+void CDemDraw::getElevationAt(const QPolygonF& pos, QPolygonF& ele)
+{
+    for(int i = 0; i < pos.size(); i++)
+    {
+        ele[i].ry() = getElevationAt(pos[i]);
+    }
+}
+
 void CDemDraw::drawt(buffer_t& currentBuffer)
 {
     // iterate over all active maps and call the draw method
diff --git a/src/dem/CDemDraw.h b/src/dem/CDemDraw.h
index 9584c0b..ab60775 100644
--- a/src/dem/CDemDraw.h
+++ b/src/dem/CDemDraw.h
@@ -47,8 +47,8 @@ class CDemDraw : public IDrawContext
         */
         void loadConfigForDemItem(CDemItem * item);
 
-
-        qreal getEelevationAt(const QPointF& pos);
+        qreal getElevationAt(const QPointF& pos);
+        void  getElevationAt(const QPolygonF& pos, QPolygonF& ele);
 
         void setProjection(const QString& proj);
 
diff --git a/src/dem/CDemPropSetup.cpp b/src/dem/CDemPropSetup.cpp
index 55aeb1a..2cdd8d1 100644
--- a/src/dem/CDemPropSetup.cpp
+++ b/src/dem/CDemPropSetup.cpp
@@ -38,6 +38,10 @@ CDemPropSetup::CDemPropSetup(IDem * demfile, CDemDraw *dem)
     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()));
+
 }
 
 CDemPropSetup::~CDemPropSetup()
@@ -57,6 +61,7 @@ void CDemPropSetup::slotPropertiesChanged()
     toolSetMaxScale->blockSignals(true);
     toolSetMinScale->blockSignals(true);
     checkHillshading->blockSignals(true);
+    sliderHillshading->blockSignals(true);
 
     sliderOpacity->setValue(demfile->getOpacity());
     qreal minScale = demfile->getMinScale();
@@ -67,11 +72,13 @@ void CDemPropSetup::slotPropertiesChanged()
     updateScaleLabel();
 
     checkHillshading->setChecked(demfile->doHillshading());
+    sliderHillshading->setValue(demfile->getFactorHillshading());
 
     sliderOpacity->blockSignals(false);
     toolSetMaxScale->blockSignals(false);
     toolSetMinScale->blockSignals(false);
     checkHillshading->blockSignals(false);
+    sliderHillshading->blockSignals(false);
 }
 
 void CDemPropSetup::slotScaleChanged(const QPointF& s)
diff --git a/src/dem/CDemVRT.cpp b/src/dem/CDemVRT.cpp
index c08e836..7375a65 100644
--- a/src/dem/CDemVRT.cpp
+++ b/src/dem/CDemVRT.cpp
@@ -88,7 +88,7 @@ CDemVRT::CDemVRT(const QString &filename, CDemDraw *parent)
     xsize_px = dataset->GetRasterXSize();
     ysize_px = dataset->GetRasterYSize();
 
-    double adfGeoTransform[6];
+    qreal adfGeoTransform[6];
     dataset->GetGeoTransform( adfGeoTransform );
 
     xscale  = adfGeoTransform[1];
@@ -132,7 +132,7 @@ CDemVRT::~CDemVRT()
     delete dataset;
 }
 
-qreal CDemVRT::getEelevationAt(const QPointF& pos)
+qreal CDemVRT::getElevationAt(const QPointF& pos)
 {
     if(pjsrc == 0) return NOFLOAT;
 
@@ -241,7 +241,7 @@ void CDemVRT::draw(IDrawContext::buffer_t& buf)
     p.setOpacity(getOpacity()/100.0);
     p.translate(-pp);
 
-    double nTiles = ((right - left) * (bottom - top) / (w * h));
+    qreal nTiles = ((right - left) * (bottom - top) / (w * h));
     qDebug() << "DEM> tiles:" << nTiles;
     if(!isOutOfScale(bufferScale) && (nTiles < TILELIMIT))
     {
diff --git a/src/dem/CDemVRT.h b/src/dem/CDemVRT.h
index 14bd200..019d715 100644
--- a/src/dem/CDemVRT.h
+++ b/src/dem/CDemVRT.h
@@ -28,13 +28,14 @@ class GDALDataset;
 
 class CDemVRT : public IDem
 {
+    Q_OBJECT
     public:
         CDemVRT(const QString& filename, CDemDraw *parent);
         virtual ~CDemVRT();
 
         void draw(IDrawContext::buffer_t& buf);
 
-        qreal getEelevationAt(const QPointF& pos);
+        qreal getElevationAt(const QPointF& pos);
 
     private:
         QMutex mutex;
diff --git a/src/dem/IDem.cpp b/src/dem/IDem.cpp
index 2fa8ebc..436f05e 100644
--- a/src/dem/IDem.cpp
+++ b/src/dem/IDem.cpp
@@ -47,6 +47,7 @@ IDem::IDem(CDemDraw *parent)
     , pjsrc(0)
     , isActivated(false)
     , bHillshading(false)
+    , factorHillshading(1.0)
 {
     slotSetOpacity(50);
     pjtar = pj_init_plus("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
@@ -70,6 +71,7 @@ void IDem::saveConfig(QSettings& cfg)
     IDrawObject::saveConfig(cfg);
 
     cfg.setValue("doHillshading",bHillshading);
+    cfg.setValue("factorHillshading", factorHillshading);
 }
 
 void IDem::loadConfig(QSettings& cfg)
@@ -77,6 +79,7 @@ void IDem::loadConfig(QSettings& cfg)
     IDrawObject::loadConfig(cfg);
 
     bHillshading = cfg.value("doHillshading",bHillshading).toBool();
+    factorHillshading = cfg.value("factorHillshading", factorHillshading).toFloat();
 }
 
 
@@ -90,6 +93,38 @@ IDemProp * IDem::getSetup()
     return setup;
 }
 
+void IDem::slotSetFactorHillshade(int f)
+{
+    if(f == 0)
+    {
+        factorHillshading = 1.0;
+    }
+    else if(f < 0)
+    {
+        factorHillshading = - 1.0/f;
+    }
+    else
+    {
+        factorHillshading = f;
+    }
+}
+
+int IDem::getFactorHillshading()
+{
+    if(factorHillshading == 1.0)
+    {
+        return 0;
+    }
+    else if(factorHillshading < 1)
+    {
+        return - 1.0/factorHillshading;
+    }
+    else
+    {
+        return factorHillshading;
+    }
+}
+
 void IDem::hillshading(QVector<qint16>& data, qreal w, qreal h, QImage& img)
 {
     int wp2 = w + 2;
@@ -106,8 +141,8 @@ void IDem::hillshading(QVector<qint16>& data, qreal w, qreal h, QImage& img)
         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);
+            dx          = ((win[0] + win[3] + win[3] + win[6]) - (win[2] + win[5] + win[5] + win[8])) / (xscale*factorHillshading);
+            dy          = ((win[6] + win[7] + win[7] + win[8]) - (win[0] + win[1] + win[1] + win[2])) / (yscale*factorHillshading);
             aspect      = atan2(dy, dx);
             xx_plus_yy  = dx * dx + dy * dy;
             cang        = (SIN_ALT - ZFACT_COS_ALT * sqrt(xx_plus_yy) * sin(aspect - AZ)) / sqrt(1+ZFACT_BY_ZFACT*xx_plus_yy);
diff --git a/src/dem/IDem.h b/src/dem/IDem.h
index bc3119f..9d63bff 100644
--- a/src/dem/IDem.h
+++ b/src/dem/IDem.h
@@ -43,7 +43,7 @@ class IDem : public IDrawObject
 
         virtual void draw(IDrawContext::buffer_t& buf) = 0;
 
-        virtual qreal getEelevationAt(const QPointF& pos) = 0;
+        virtual qreal getElevationAt(const QPointF& pos) = 0;
 
         bool activated(){return isActivated;}
 
@@ -59,9 +59,13 @@ class IDem : public IDrawObject
 
         bool doHillshading(){return bHillshading;}
 
+        int getFactorHillshading();
+
     public slots:
         void slotSetHillshading(bool yes){bHillshading = yes;}
 
+        void slotSetFactorHillshade(int f);
+
     protected:
 
         void hillshading(QVector<qint16>& data, qreal w, qreal h, QImage &img);
@@ -94,9 +98,9 @@ class IDem : public IDrawObject
         quint32 ysize_px;
 
         /// scale [px/m]
-        double xscale;
+        qreal xscale;
         /// scale [px/m]
-        double yscale;
+        qreal yscale;
 
 
 
@@ -113,6 +117,8 @@ class IDem : public IDrawObject
     private:
         bool bHillshading;
 
+        qreal factorHillshading;
+
 
 };
 
diff --git a/src/dem/IDemPropSetup.ui b/src/dem/IDemPropSetup.ui
index 72f5859..2294a30 100644
--- a/src/dem/IDemPropSetup.ui
+++ b/src/dem/IDemPropSetup.ui
@@ -7,28 +7,13 @@
     <x>0</x>
     <y>0</y>
     <width>400</width>
-    <height>60</height>
+    <height>94</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="spacing">
-    <number>0</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">
@@ -105,11 +90,34 @@
     </layout>
    </item>
    <item>
-    <widget class="QCheckBox" name="checkHillshading">
-     <property name="text">
-      <string>Hillshading</string>
-     </property>
-    </widget>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QCheckBox" name="checkHillshading">
+       <property name="text">
+        <string>Hillshading</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSlider" name="sliderHillshading">
+       <property name="minimum">
+        <number>-8</number>
+       </property>
+       <property name="maximum">
+        <number>4</number>
+       </property>
+       <property name="singleStep">
+        <number>2</number>
+       </property>
+       <property name="pageStep">
+        <number>2</number>
+       </property>
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
    </item>
   </layout>
  </widget>
diff --git a/src/gis/CGisDraw.cpp b/src/gis/CGisDraw.cpp
index d4449d3..91edfd9 100644
--- a/src/gis/CGisDraw.cpp
+++ b/src/gis/CGisDraw.cpp
@@ -33,6 +33,11 @@ CGisDraw::~CGisDraw()
 
 }
 
+void CGisDraw::draw(QPainter& p, const QRect& rect)
+{
+    CGisWidget::self().fastDraw(p, rect, this);
+}
+
 void CGisDraw::drawt(buffer_t& currentBuffer)
 {
 
diff --git a/src/gis/CGisDraw.h b/src/gis/CGisDraw.h
index 8e70621..cb493db 100644
--- a/src/gis/CGisDraw.h
+++ b/src/gis/CGisDraw.h
@@ -29,8 +29,11 @@ class CGisDraw : public IDrawContext
         CGisDraw(CCanvas *parent);
         virtual ~CGisDraw();
 
+        using IDrawContext::draw;
+        void draw(QPainter& p, const QRect& rect);
+
     protected:
-        virtual void drawt(buffer_t& currentBuffer);
+        void drawt(buffer_t& currentBuffer);
 };
 
 #endif //CGISDRAW_H
diff --git a/src/gis/CGisListWks.cpp b/src/gis/CGisListWks.cpp
index 0ca75e3..174c10e 100644
--- a/src/gis/CGisListWks.cpp
+++ b/src/gis/CGisListWks.cpp
@@ -21,6 +21,9 @@
 #include "gis/IGisItem.h"
 #include "gis/CGisWidget.h"
 #include "gis/wpt/CGisItemWpt.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/rte/CGisItemRte.h"
+#include "gis/ovl/CGisItemOvlArea.h"
 #include "CMainWindow.h"
 
 #include <QtWidgets>
@@ -39,8 +42,12 @@ CGisListWks::CGisListWks(QWidget *parent)
 
     menuItem        = new QMenu(this);
     actionEditDetails = menuItem->addAction(QIcon("://icons/32x32/EditDetails.png"),tr("Edit..."), this, SLOT(slotEditItem()));
-    actionMoveWpt   = menuItem->addAction(QIcon("://icons/32x32/WptMove.png"),tr("Move Waypoint..."), this, SLOT(slotMoveWpt()));
+    actionMoveWpt   = menuItem->addAction(QIcon("://icons/32x32/WptMove.png"),tr("Move Waypoint"), this, SLOT(slotMoveWpt()));
     actionProjWpt   = menuItem->addAction(QIcon("://icons/32x32/WptProj.png"),tr("Proj. Waypoint..."), this, SLOT(slotProjWpt()));
+    actionFocusTrk  = menuItem->addAction(QIcon("://icons/32x32/TrkProfile.png"),tr("Track Profile"));
+    actionEditTrk   = menuItem->addAction(QIcon("://icons/32x32/LineMove.png"),tr("Edit Track Points"), this, SLOT(slotEditTrk()));
+    actionFocusTrk->setCheckable(true);
+    connect(actionFocusTrk, SIGNAL(triggered(bool)), this, SLOT(slotFocusTrk(bool)));
     actionDelete    = menuItem->addAction(QIcon("://icons/32x32/DeleteOne.png"),tr("Delete"), this, SLOT(slotDeleteItem()));
 
 }
@@ -50,6 +57,235 @@ CGisListWks::~CGisListWks()
 
 }
 
+void CGisListWks::dragMoveEvent (QDragMoveEvent  * e )
+{
+    /*
+        What's happening here?
+
+        1) Cast current item and item under cursor to GIS item type
+        2) If type matches for both test for common parent
+        2.1) common parent->  move
+        2.1) different parent -> copy
+        3) go on with dragMoveEvent();
+
+    */
+
+    CGisItemTrk * trk1 = dynamic_cast<CGisItemTrk*>(currentItem());
+    CGisItemTrk * trk2 = dynamic_cast<CGisItemTrk*>(itemAt(e->pos()));
+
+    if(trk1 && trk2)
+    {
+        if(trk1->parent() == trk2->parent())
+        {
+            e->setDropAction(Qt::MoveAction);
+        }
+        else
+        {
+            e->setDropAction(Qt::CopyAction);
+        }
+        QTreeWidget::dragMoveEvent(e);
+        return;
+    }
+
+    CGisItemWpt * wpt1 = dynamic_cast<CGisItemWpt*>(currentItem());
+    CGisItemWpt * wpt2 = dynamic_cast<CGisItemWpt*>(itemAt(e->pos()));
+
+    if(wpt1 && wpt2)
+    {
+        if(wpt1->parent() == wpt2->parent())
+        {
+            e->setDropAction(Qt::MoveAction);
+        }
+        else
+        {
+            e->setDropAction(Qt::CopyAction);
+        }
+        QTreeWidget::dragMoveEvent(e);
+        return;
+    }
+
+    CGisItemRte * rte1 = dynamic_cast<CGisItemRte*>(currentItem());
+    CGisItemRte * rte2 = dynamic_cast<CGisItemRte*>(itemAt(e->pos()));
+
+    if(rte1 && rte2)
+    {
+        if(rte1->parent() == rte2->parent())
+        {
+            e->setDropAction(Qt::MoveAction);
+        }
+        else
+        {
+            e->setDropAction(Qt::CopyAction);
+        }
+        QTreeWidget::dragMoveEvent(e);
+        return;
+
+    }
+
+    CGisItemOvlArea * area1 = dynamic_cast<CGisItemOvlArea*>(currentItem());
+    CGisItemOvlArea * area2 = dynamic_cast<CGisItemOvlArea*>(itemAt(e->pos()));
+
+    if(area1 && area2)
+    {
+        if(area1->parent() == area2->parent())
+        {
+            e->setDropAction(Qt::MoveAction);
+        }
+        else
+        {
+            e->setDropAction(Qt::CopyAction);
+        }
+        QTreeWidget::dragMoveEvent(e);
+        return;
+
+    }
+
+    CGisProject * proj = dynamic_cast<CGisProject*>(itemAt(e->pos()));
+    if(proj && proj != currentItem()->parent())
+    {
+        e->setDropAction(Qt::CopyAction);
+        QTreeWidget::dragMoveEvent(e);
+        return;
+    }
+
+    e->setDropAction(Qt::IgnoreAction);
+    QTreeWidget::dragMoveEvent(e);
+}
+
+void CGisListWks::dropEvent ( QDropEvent  * e )
+{
+
+    /*
+        What's happening here?
+
+        1) Test if item will be inserted above ore below item under cursor.
+        2) Cast current item and item under cursor to GIS item type
+        3) If type matches for both test for common parent
+        3.1) common parent-> go on with default drop event
+        3.1) different parent -> create a copy and insert it index
+        4) signal change of project
+
+        5) Test if item under cursor is a project
+        6) If project and project is not item's project create a copy
+
+    */
+
+    // calc. index offset (below/above item)
+    QRect r = visualItemRect(itemAt(e->pos()));
+    int y1 = r.top() + r.height()/2;
+    int y2 = e->pos().y();
+    int off = y2 > y1 ? 1 : 0;
+
+    CGisItemWpt * wpt1 = dynamic_cast<CGisItemWpt*>(currentItem());
+    CGisItemWpt * wpt2 = dynamic_cast<CGisItemWpt*>(itemAt(e->pos()));
+
+    if(wpt1 && wpt2)
+    {
+        if(wpt1->parent() == wpt2->parent())
+        {
+            QTreeWidget::dropEvent(e);
+        }
+        else
+        {
+            CGisProject * project = dynamic_cast<CGisProject*>(wpt2->parent());
+            if(project)
+            {
+                new CGisItemWpt(*wpt1,project, project->indexOfChild(wpt2) + off);
+            }
+        }
+        emit sigChanged();
+        return;
+    }
+
+    CGisItemTrk * trk1 = dynamic_cast<CGisItemTrk*>(currentItem());
+    CGisItemTrk * trk2 = dynamic_cast<CGisItemTrk*>(itemAt(e->pos()));
+
+    if(trk1 && trk2)
+    {
+        if(trk1->parent() == trk2->parent())
+        {
+            QTreeWidget::dropEvent(e);
+        }
+        else
+        {
+            CGisProject * project = dynamic_cast<CGisProject*>(trk2->parent());
+            if(project)
+            {
+                new CGisItemTrk(*trk1,project, project->indexOfChild(trk2) + off);
+            }
+        }
+        emit sigChanged();
+        return;
+    }
+
+    CGisItemRte * rte1 = dynamic_cast<CGisItemRte*>(currentItem());
+    CGisItemRte * rte2 = dynamic_cast<CGisItemRte*>(itemAt(e->pos()));
+
+    if(rte1 && rte2)
+    {
+        if(rte1->parent() == rte2->parent())
+        {
+            QTreeWidget::dropEvent(e);
+        }
+        else
+        {
+            CGisProject * project = dynamic_cast<CGisProject*>(rte2->parent());
+            if(project)
+            {
+                new CGisItemRte(*rte1,project, project->indexOfChild(rte2) + off);
+            }
+        }
+        emit sigChanged();
+        return;
+    }
+
+    CGisItemOvlArea * area1 = dynamic_cast<CGisItemOvlArea*>(currentItem());
+    CGisItemOvlArea * area2 = dynamic_cast<CGisItemOvlArea*>(itemAt(e->pos()));
+
+    if(area1 && area2)
+    {
+        if(area1->parent() == area2->parent())
+        {
+            QTreeWidget::dropEvent(e);
+        }
+        else
+        {
+            CGisProject * project = dynamic_cast<CGisProject*>(area2->parent());
+            if(project)
+            {
+                new CGisItemOvlArea(*area1,project, project->indexOfChild(area2) + off);
+            }
+        }
+        emit sigChanged();
+        return;
+    }
+
+
+    CGisProject * project = dynamic_cast<CGisProject*>(itemAt(e->pos()));
+    if(project && project != currentItem()->parent())
+    {
+        if(wpt1 != 0)
+        {
+            new CGisItemWpt(*wpt1, project, -1);
+        }
+        else if(trk1 != 0)
+        {
+            new CGisItemTrk(*trk1, project, -1);
+        }
+        else if(rte1 != 0)
+        {
+            new CGisItemRte(*rte1, project, -1);
+        }
+        else if(area1 != 0)
+        {
+            new CGisItemOvlArea(*area1, project, -1);
+        }
+
+    }
+
+}
+
+
 bool CGisListWks::hasProject(const QString& key)
 {
     QMutexLocker lock(&IGisItem::mutexItems);
@@ -76,7 +312,7 @@ void CGisListWks::slotContextMenu(const QPoint& point)
     IGisItem * gisItem = dynamic_cast<IGisItem*>(currentItem());
     if(gisItem != 0)
     {
-        // try to cast item to special types and hide/show actions on result
+        // try to cast item to waypoint and hide/show actions on result
         CGisItemWpt * wpt = dynamic_cast<CGisItemWpt*>(gisItem);
         if(wpt == 0)
         {
@@ -91,6 +327,20 @@ void CGisListWks::slotContextMenu(const QPoint& point)
             actionProjWpt->setEnabled(!wpt->isGeocache());
         }
 
+        // try to cast item to track and hide/show actions on result
+        CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(gisItem);
+        if(trk == 0)
+        {
+            actionFocusTrk->setVisible(false);
+            actionEditTrk->setVisible(false);
+        }
+        else
+        {
+            actionFocusTrk->setVisible(true);
+            actionEditTrk->setVisible(true);
+            actionFocusTrk->setChecked(trk->hasUserFocus());
+            actionEditTrk->setEnabled(!trk->isReadOnly());
+        }
         // display menu
         QPoint p = mapToGlobal(point);
         menuItem->exec(p);
@@ -155,6 +405,7 @@ void CGisListWks::slotItemDoubleClicked(QTreeWidgetItem * item, int )
     if(gisItem != 0)
     {
         CMainWindow::self().zoomCanvasTo(gisItem->getBoundingRect());
+        CGisWidget::self().focusTrkByKey(true, gisItem->getKey());
     }    
     IGisItem::mutexItems.unlock();
 }
@@ -210,3 +461,27 @@ void CGisListWks::slotMoveWpt()
     }
     IGisItem::mutexItems.unlock();
 }
+
+void CGisListWks::slotFocusTrk(bool on)
+{
+    IGisItem::mutexItems.lock();
+    CGisItemTrk * gisItem = dynamic_cast<CGisItemTrk*>(currentItem());
+    if(gisItem != 0)
+    {
+        QString key = gisItem->getKey();
+        CGisWidget::self().focusTrkByKey(on, key);
+    }
+    IGisItem::mutexItems.unlock();
+}
+
+void CGisListWks::slotEditTrk()
+{
+    IGisItem::mutexItems.lock();
+    CGisItemTrk * gisItem = dynamic_cast<CGisItemTrk*>(currentItem());
+    if(gisItem != 0)
+    {
+        QString key = gisItem->getKey();
+        CGisWidget::self().editTrkByKey(key);
+    }
+    IGisItem::mutexItems.unlock();
+}
diff --git a/src/gis/CGisListWks.h b/src/gis/CGisListWks.h
index 2b51fd3..4d7d139 100644
--- a/src/gis/CGisListWks.h
+++ b/src/gis/CGisListWks.h
@@ -35,6 +35,10 @@ class CGisListWks : public QTreeWidget
     signals:
         void sigChanged();
 
+    protected:
+        void dragMoveEvent (QDragMoveEvent  * e );
+        void dropEvent ( QDropEvent  * e );
+
     private slots:
         void slotContextMenu(const QPoint& point);
         void slotSaveProject();
@@ -44,7 +48,9 @@ class CGisListWks : public QTreeWidget
         void slotEditItem();
         void slotDeleteItem();
         void slotProjWpt();
-        void slotMoveWpt();
+        void slotMoveWpt();        
+        void slotFocusTrk(bool on);
+        void slotEditTrk();
 
     private:
         QMenu * menuProject;
@@ -57,6 +63,8 @@ class CGisListWks : public QTreeWidget
         QAction * actionDelete;
         QAction * actionProjWpt;
         QAction * actionMoveWpt;
+        QAction * actionFocusTrk;
+        QAction * actionEditTrk;
 
 };
 
diff --git a/src/gis/CGisProject.cpp b/src/gis/CGisProject.cpp
index 40fb7d7..3c1875d 100644
--- a/src/gis/CGisProject.cpp
+++ b/src/gis/CGisProject.cpp
@@ -21,6 +21,7 @@
 #include "gis/wpt/CGisItemWpt.h"
 #include "gis/trk/CGisItemTrk.h"
 #include "gis/rte/CGisItemRte.h"
+#include "gis/ovl/CGisItemOvlArea.h"
 #include "gis/CGisDraw.h"
 #include "helpers/CSettings.h"
 #include "version.h"
@@ -38,6 +39,19 @@ const QString CGisProject::rmc_ns      = "urn:net:trekbuddy:1.0:nmea:rmc";
 const QString CGisProject::ql_ns       = "http://www.qlandkarte.org/xmlschemas/v1.1";
 const QString CGisProject::gs_ns       = "http://www.groundspeak.com/cache/1/0";
 
+CGisProject::CGisProject(const QString &name, CGisListWks * parent)
+    : QTreeWidgetItem(parent)
+    , valid(true)
+{
+    QCryptographicHash md5(QCryptographicHash::Md5);
+    md5.addData(name.toUtf8());
+    key = md5.result().toHex();
+
+    setText(0, name);
+    setIcon(0,QIcon("://icons/32x32/GisProject.png"));
+
+    setToolTip(0, getInfo());
+}
 
 CGisProject::CGisProject(const QString &filename, const QString& key, CGisListWks *parent)
     : QTreeWidgetItem(parent)
@@ -80,6 +94,9 @@ CGisProject::CGisProject(const QString &filename, const QString& key, CGisListWk
     }
 
 
+    /** @note   If you change the order of the item types read you have to
+                take care of the order enforced in IGisItem().
+    */
     QList<QTreeWidgetItem*> items;
     const QDomNodeList& xmlTrks = xmlGpx.elementsByTagName("trk");
     N = xmlTrks.count();
@@ -108,6 +125,17 @@ CGisProject::CGisProject(const QString &filename, const QString& key, CGisListWk
         items << item;
     }
 
+    const QDomElement& xmlExtension = xmlGpx.namedItem("extensions").toElement();
+    const QDomNodeList& xmlAreas = xmlExtension.elementsByTagName("ql:area");
+    N = xmlAreas.count();
+    for(int n = 0; n < N; ++n)
+    {
+        const QDomNode& xmlArea = xmlAreas.item(n);
+        QTreeWidgetItem * item = new CGisItemOvlArea(xmlArea, this);
+        items << item;
+    }
+
+
     addChildren(items);
     setToolTip(0, getInfo());
 
@@ -126,7 +154,7 @@ QString CGisProject::getInfo()
     if(metadata.time.isValid())
     {
         str += "\n";
-        str += IUnit::datetime2string(metadata.time);
+        str += IUnit::datetime2string(metadata.time, false);
     }
 
 
@@ -344,6 +372,7 @@ void CGisProject::delItemByKey(const QString& key)
             }
 
             items << takeChild(i-1);
+            setText(1,"*");
         }
     }
     qDeleteAll(items);
@@ -392,6 +421,23 @@ void CGisProject::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& b
 
 }
 
+void CGisProject::drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis)
+{
+    for(int i = 0; i < childCount(); i++)
+    {
+
+        IGisItem * item = dynamic_cast<IGisItem*>(child(i));
+        if(item == 0)
+        {
+            continue;
+        }
+
+
+        item->drawItem(p, viewport, gis);
+    }
+
+}
+
 void CGisProject::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, const QFontMetricsF& fm, CGisDraw * gis)
 {
 
@@ -421,7 +467,14 @@ void CGisProject::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>&
 
 void CGisProject::save()
 {
-    saveGpx(filename);
+    if(filename.isEmpty())
+    {
+        saveAs();
+    }
+    else
+    {
+        saveGpx(filename);
+    }
 }
 
 void CGisProject::saveAs()
@@ -531,6 +584,19 @@ void CGisProject::saveGpx(const QString& fn)
         item->save(gpx);
     }
 
+    QDomElement xmlExt = doc.createElement("extensions");
+    gpx.appendChild(xmlExt);
+    for(int i = 0; i < childCount(); i++)
+    {
+        CGisItemOvlArea * item = dynamic_cast<CGisItemOvlArea*>(child(i));
+        if(item == 0)
+        {
+            continue;
+        }
+        item->save(xmlExt);
+    }
+
+
     //  ---- stop  content of gpx
 
     if(!file.open(QIODevice::WriteOnly))
@@ -552,5 +618,6 @@ void CGisProject::saveGpx(const QString& fn)
 
     filename = _fn_;
     setText(0, QFileInfo(filename).baseName());
+    setText(1,"");
 }
 
diff --git a/src/gis/CGisProject.h b/src/gis/CGisProject.h
index 201e227..db55343 100644
--- a/src/gis/CGisProject.h
+++ b/src/gis/CGisProject.h
@@ -33,6 +33,7 @@ class CGisDraw;
 class CGisProject : public QTreeWidgetItem
 {
     public:
+        CGisProject(const QString &name, CGisListWks * parent);
         CGisProject(const QString& filename, const QString &key, CGisListWks * parent);
         virtual ~CGisProject();
 
@@ -83,6 +84,7 @@ class CGisProject : public QTreeWidgetItem
 
         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 QRectF& viewport, CGisDraw * gis);
 
         void save();
         void saveAs();
diff --git a/src/gis/CGisWidget.cpp b/src/gis/CGisWidget.cpp
index a1d7a6f..e15c5c6 100644
--- a/src/gis/CGisWidget.cpp
+++ b/src/gis/CGisWidget.cpp
@@ -22,8 +22,11 @@
 #include "gis/CGisDraw.h"
 #include "gis/wpt/CGisItemWpt.h"
 #include "gis/wpt/CProjWpt.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/ovl/CGisItemOvlArea.h"
 #include "CMainWindow.h"
 #include "helpers/CSettings.h"
+#include "helpers/CSelectProjectDialog.h"
 
 #include <QtWidgets>
 #include <QtXml>
@@ -97,6 +100,40 @@ void CGisWidget::slotSaveAll()
     QApplication::restoreOverrideCursor();
 }
 
+CGisProject * CGisWidget::selectProject()
+{
+    QString key, name;
+
+    CSelectProjectDialog dlg(key, name, treeWks);
+    dlg.exec();
+
+    CGisProject * project = 0;
+    if(!key.isEmpty())
+    {
+        IGisItem::mutexItems.lock();
+        for(int i = 0; i < treeWks->topLevelItemCount(); i++)
+        {
+            project = dynamic_cast<CGisProject*>(treeWks->topLevelItem(i));
+            if(project == 0)
+            {
+                continue;
+            }
+            if(key == project->getKey())
+            {
+                break;
+            }
+        }
+        IGisItem::mutexItems.unlock();
+    }
+    else if(!name.isEmpty())
+    {
+        IGisItem::mutexItems.lock();
+        project = new CGisProject(name, treeWks);
+        IGisItem::mutexItems.unlock();
+    }
+
+    return project;
+}
 
 void CGisWidget::getItemsByPos(const QPointF& pos, QList<IGisItem*>& items)
 {
@@ -203,6 +240,67 @@ void CGisWidget::moveWptByKey(const QString& key)
     IGisItem::mutexItems.unlock();
 }
 
+void CGisWidget::focusTrkByKey(bool yes, const QString& key)
+{
+    IGisItem::mutexItems.lock();
+
+    CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
+    if(trk != 0)
+    {
+        trk->gainUserFocus(yes);
+    }
+
+    IGisItem::mutexItems.unlock();
+    emit sigChanged();
+}
+
+void CGisWidget::cutTrkByKey(const QString& key)
+{
+    IGisItem::mutexItems.lock();
+
+    CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
+    if(trk != 0 && trk->cut())
+    {
+        delete trk;
+    }
+    IGisItem::mutexItems.unlock();
+    emit sigChanged();
+}
+
+void CGisWidget::editTrkByKey(const QString& key)
+{
+    IGisItem::mutexItems.lock();
+
+    CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(getItemByKey(key));
+    if(trk != 0)
+    {
+        CCanvas * canvas = CMainWindow::self().getVisibleCanvas();
+        if(canvas != 0)
+        {
+            canvas->setMouseEditTrk(*trk);
+        }
+    }
+
+    IGisItem::mutexItems.unlock();
+}
+
+void CGisWidget::editAreaByKey(const QString& key)
+{
+    IGisItem::mutexItems.lock();
+
+    CGisItemOvlArea * area = dynamic_cast<CGisItemOvlArea*>(getItemByKey(key));
+    if(area != 0)
+    {
+        CCanvas * canvas = CMainWindow::self().getVisibleCanvas();
+        if(canvas != 0)
+        {
+            canvas->setMouseEditArea(*area);
+        }
+    }
+
+    IGisItem::mutexItems.unlock();
+}
+
 void CGisWidget::draw(QPainter& p, const QRectF& viewport, CGisDraw * gis)
 {
     QFontMetricsF fm(CMainWindow::self().getMapFont());
@@ -218,12 +316,12 @@ void CGisWidget::draw(QPainter& p, const QRectF& viewport, CGisDraw * gis)
             break;
         }
 
-        CGisProject * item = dynamic_cast<CGisProject*>(treeWks->topLevelItem(i));
-        if(item == 0)
+        CGisProject * project = dynamic_cast<CGisProject*>(treeWks->topLevelItem(i));
+        if(project == 0)
         {
             continue;
         }
-        item->drawItem(p, viewport, blockedAreas, seenKeys, gis);
+        project->drawItem(p, viewport, blockedAreas, seenKeys, gis);
     }
 
     // reset seen keys as lables will build the list a second time
@@ -237,12 +335,32 @@ void CGisWidget::draw(QPainter& p, const QRectF& viewport, CGisDraw * gis)
             break;
         }
 
-        CGisProject * item = dynamic_cast<CGisProject*>(treeWks->topLevelItem(i));
-        if(item == 0)
+        CGisProject * project = dynamic_cast<CGisProject*>(treeWks->topLevelItem(i));
+        if(project == 0)
         {
             continue;
         }
-        item->drawLabel(p, viewport, blockedAreas, seenKeys, fm, gis);
+        project->drawLabel(p, viewport, blockedAreas, seenKeys, fm, gis);
     }
     IGisItem::mutexItems.unlock();
 }
+
+void CGisWidget::fastDraw(QPainter& p, const QRectF& viewport, CGisDraw *gis)
+{
+    /*
+        Mutex locking will make map moving very slow if there are many GIS items
+        visible. Remove it for now. But I am not sure if that is a good idea.
+    */
+    //IGisItem::mutexItems.lock();
+    for(int i = 0; i < treeWks->topLevelItemCount(); i++)
+    {
+        CGisProject * project = dynamic_cast<CGisProject*>(treeWks->topLevelItem(i));
+        if(project == 0)
+        {
+            continue;
+        }
+
+        project->drawItem(p, viewport, gis);
+    }
+    //IGisItem::mutexItems.unlock();
+}
diff --git a/src/gis/CGisWidget.h b/src/gis/CGisWidget.h
index 978d498..f893165 100644
--- a/src/gis/CGisWidget.h
+++ b/src/gis/CGisWidget.h
@@ -24,6 +24,7 @@
 
 class CGisDraw;
 class IGisItem;
+class CGisProject;
 
 class CGisWidget : public QWidget, private Ui::IGisWidget
 {
@@ -36,12 +37,27 @@ class CGisWidget : public QWidget, private Ui::IGisWidget
         /**
            @brief Draw all loaded data in the workspace that is visible
 
+           This method is called from The CGisDraw thread. The thread has to make sure
+           that everything is thread safe.
+
            @param p         the painter to be used
            @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);
 
+
+        /**
+           @brief Draw all data that is time variant and can't wait for a full update
+
+           This method is called directly from the main thread's paintEvent() method.
+
+           @param p         the painter to be used
+           @param viewport  the viewport in units of rad
+           @param gis       the draw context to be used
+        */
+        void fastDraw(QPainter& p, const QRectF& viewport, CGisDraw *gis);
+
         /**
            @brief Get items close to the given point
 
@@ -50,7 +66,7 @@ class CGisWidget : public QWidget, private Ui::IGisWidget
 
            @param pos       the position in pixel
            @param items     an empty item list that will get filled with temporary pointers
-         */
+        */
         void getItemsByPos(const QPointF& pos, QList<IGisItem *> &items);
 
         /**
@@ -70,12 +86,48 @@ class CGisWidget : public QWidget, private Ui::IGisWidget
          */
         void delItemByKey(const QString& key);
 
+        /**
+           @brief Edit / view item details
+           @param key       the item's key as it is returned from IGisItem::getKey()
+         */
         void editItemByKey(const QString& key);
 
+        /**
+           @brief Clone waypoint and move clone
+           @param key       the item's key as it is returned from IGisItem::getKey()
+         */
         void projWptByKey(const QString& key);
 
+        /**
+           @brief Move waypoint via mouse
+           @param key       the item's key as it is returned from IGisItem::getKey()
+         */
         void moveWptByKey(const QString& key);
 
+        /**
+           @brief Set user focus to track
+           @param yes       true if focus is set
+           @param key       the item's key as it is returned from IGisItem::getKey()
+         */
+        void focusTrkByKey(bool yes, const QString& key);
+
+
+        void cutTrkByKey(const QString& key);
+
+        void editTrkByKey(const QString& key);
+
+        void editAreaByKey(const QString& key);
+
+        /**
+           @brief Select a project via dialog
+
+           If a new project name is entered a new project is created. Else the pointer
+           to an existing project is passed back.
+
+           @return 0 if no project was selected.
+         */
+        CGisProject * selectProject();
+
     signals:
         void sigChanged();
 
diff --git a/src/gis/IGisItem.cpp b/src/gis/IGisItem.cpp
index 091bbd3..6923d26 100644
--- a/src/gis/IGisItem.cpp
+++ b/src/gis/IGisItem.cpp
@@ -17,6 +17,10 @@
 **********************************************************************************************/
 
 #include "gis/IGisItem.h"
+#include "gis/CGisProject.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/wpt/CGisItemWpt.h"
+#include "gis/rte/CGisItemRte.h"
 #include "units/IUnit.h"
 #include "canvas/CCanvas.h"
 #include "GeoMath.h"
@@ -49,11 +53,85 @@ const IGisItem::color_t IGisItem::colorMap[] =
 
 };
 
-IGisItem::IGisItem(QTreeWidgetItem *parent)
-    : QTreeWidgetItem(parent)
+IGisItem::IGisItem(QTreeWidgetItem *parent, type_e typ, int idx)
+    : QTreeWidgetItem(parent, typ)
     , flags(0)
 {
+    setFlags(QTreeWidgetItem::flags() & ~Qt::ItemIsDropEnabled);
 
+    if(idx >= 0)
+    {
+        parent->removeChild(this);
+        parent->insertChild(idx, this);
+    }
+    else
+    {        
+        if(type() == eTypeTrk)
+        {
+            for(int n = parent->childCount() - 2; n >= 0; n--)
+            {
+                /** @note   The order of item types to test is given by the order items read from
+                            the GPX file in the CGisProject constructor.  */
+
+                int childType = parent->child(n)->type();
+                if(childType == eTypeTrk)
+                {
+                    parent->removeChild(this);
+                    parent->insertChild(n+1, this);
+                    break;
+                }
+            }
+        }
+        else if(type() == eTypeRte)
+        {
+            for(int n = parent->childCount() - 2; n >= 0; n--)
+            {
+                /** @note   The order of item types to test is given by the order items read from
+                            the GPX file in the CGisProject constructor.  */
+
+                int childType = parent->child(n)->type();
+                if( childType == eTypeRte || childType == eTypeTrk)
+                {
+                    parent->removeChild(this);
+                    parent->insertChild(n+1, this);
+                    break;
+                }
+            }
+        }
+        else if(type() == eTypeWpt)
+        {
+            for(int n = parent->childCount() - 2; n >= 0; n--)
+            {
+                /** @note   The order of item types to test is given by the order items read from
+                            the GPX file in the CGisProject constructor.  */
+
+                int childType = parent->child(n)->type();
+                if(childType == eTypeWpt || childType == eTypeRte || childType == eTypeTrk)
+                {
+                    parent->removeChild(this);
+                    parent->insertChild(n+1, this);
+                    break;
+                }
+            }
+        }
+        else if(type() == eTypeOvl)
+        {
+            for(int n = parent->childCount() - 2; n >= 0; n--)
+            {
+                /** @note   The order of item types to test is given by the order items read from
+                            the GPX file in the CGisProject constructor.  */
+
+                int childType = parent->child(n)->type();
+                if(childType == eTypeOvl || childType == eTypeWpt || childType == eTypeRte || childType == eTypeTrk)
+                {
+                    parent->removeChild(this);
+                    parent->insertChild(n+1, this);
+                    break;
+                }
+            }
+        }
+
+    }
 }
 
 IGisItem::~IGisItem()
@@ -66,8 +144,14 @@ void IGisItem::changed(const QString &what)
     setText(1,"*");
     setToolTip(0,getInfo());
 
+    CGisProject * project = dynamic_cast<CGisProject*>(parent());
+    if(project)
+    {
+        project->setText(1,"*");
+    }
+
     /*
-        If item gets changed but it's origin is not QMapShack
+        If item gets changed but if it's origin is not QMapShack
         then it is assumed to be tainted, as imported data should
         never be changed without notice.
     */
@@ -91,7 +175,7 @@ bool IGisItem::isTainted()
 
 void IGisItem::setReadOnlyMode(bool readOnly)
 {
-    if(!(flags & eFlagCreatedInQms))
+    if(!(flags & (eFlagCreatedInQms|eFlagTainted)))
     {
         if(isReadOnly() && !readOnly)
         {
@@ -194,10 +278,11 @@ const QString& IGisItem::getKey()
 
 QColor IGisItem::str2color(const QString& name)
 {
+    QColor ref(name);
     const color_t * p = colorMap;
     while(p->name)
     {
-        if(p->name == name)
+        if(p->color == ref)
         {
             return p->color;
         }
@@ -279,7 +364,7 @@ void IGisItem::drawArrows(const QPolygonF& line, const QRectF& extViewport, QPai
 
     // draw direction arrows
     bool    start = true;
-    double  heading;
+    qreal  heading;
 
     //generate arrow pic on-the-fly
     QImage arrow_pic(21,16, QImage::Format_ARGB32);
@@ -314,7 +399,7 @@ void IGisItem::drawArrows(const QPolygonF& line, const QRectF& extViewport, QPai
             {
                 if(0 != pt.x() - pt1.x() && (pt.y() - pt1.y()))
                 {
-                    heading = ( atan2((double)(pt.y() - pt1.y()), (double)(pt.x() - pt1.x())) * 180.) / M_PI;
+                    heading = ( atan2((qreal)(pt.y() - pt1.y()), (qreal)(pt.x() - pt1.x())) * 180.) / M_PI;
 
                     p.save();
                     // draw arrow between bullets
diff --git a/src/gis/IGisItem.h b/src/gis/IGisItem.h
index fb44518..992af98 100644
--- a/src/gis/IGisItem.h
+++ b/src/gis/IGisItem.h
@@ -41,7 +41,25 @@ class IGisItem : public QTreeWidgetItem
 {
 
     public:
-        IGisItem(QTreeWidgetItem * parent);
+        typedef QStringList history_t;
+        history_t history;
+
+        struct link_t
+        {
+            QUrl    uri;
+            QString text;
+            QString type;
+        };
+
+        enum type_e
+        {
+              eTypeTrk
+            , eTypeRte
+            , eTypeWpt
+            , eTypeOvl
+        };
+
+        IGisItem(QTreeWidgetItem * parent, type_e typ, int idx);
         virtual ~IGisItem();
 
         /// this mutex has to be locked when ever the item list is accessed.
@@ -75,6 +93,8 @@ class IGisItem : public QTreeWidgetItem
         */
         virtual QString getInfo() = 0;
 
+        virtual const history_t& getHistory(){return history;}
+
         /**
             @brief Edit content of item.
 
@@ -91,7 +111,7 @@ class IGisItem : public QTreeWidgetItem
 
            @return
          */
-        virtual QRectF getBoundingRect(){return boundingRect;}
+        virtual const QRectF& getBoundingRect(){return boundingRect;}
 
         /**
            @brief Get screen option object to display and handle actions for this item.
@@ -121,6 +141,10 @@ class IGisItem : public QTreeWidgetItem
          */
         bool isReadOnly();
 
+        /**
+           @brief Query if the item is imported and was changed
+           @return True if content was changed.
+         */
         bool isTainted();
         /**
            @brief Set the read only mode.
@@ -133,10 +157,11 @@ 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 QRectF& viewport, CGisDraw * gis){}
         virtual void drawLabel(QPainter& p, const QRectF& viewport,QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis) = 0;
         virtual void drawHighlight(QPainter& p) = 0;        
 
-        virtual void gainUserFocus() = 0;
+        virtual void gainUserFocus(bool yes) = 0;
 
         static QString removeHtml(const QString &str);
 
@@ -168,8 +193,6 @@ class IGisItem : public QTreeWidgetItem
         QRectF boundingRect;
         static const color_t colorMap[];
 
-        typedef QStringList history_t;
-        history_t history;
 
         struct color_t
         {
@@ -178,12 +201,6 @@ class IGisItem : public QTreeWidgetItem
         };
 
 
-        struct link_t
-        {
-            QUrl    uri;
-            QString text;
-            QString type;
-        };
 
         struct wpt_t
         {
diff --git a/src/mouse/IScrOpt.cpp b/src/gis/IGisLine.cpp
similarity index 80%
copy from src/mouse/IScrOpt.cpp
copy to src/gis/IGisLine.cpp
index 735b533..7850c86 100644
--- a/src/mouse/IScrOpt.cpp
+++ b/src/gis/IGisLine.cpp
@@ -16,24 +16,15 @@
 
 **********************************************************************************************/
 
-#include "IScrOpt.h"
-#include "units/IUnit.h"
-#include <QtWidgets>
+#include "IGisLine.h"
 
-
-IScrOpt::IScrOpt(QWidget *parent)
-    : QWidget(parent)
+IGisLine::IGisLine()
 {
 
 }
 
-IScrOpt::~IScrOpt()
+IGisLine::~IGisLine()
 {
 
 }
 
-
-void IScrOpt::mouseMoveEvent(QMouseEvent * e)
-{
-    mousePos = e->pos();
-}
diff --git a/src/map/CMapMAP.h b/src/gis/IGisLine.h
similarity index 78%
copy from src/map/CMapMAP.h
copy to src/gis/IGisLine.h
index 42837bf..07dc2a6 100644
--- a/src/map/CMapMAP.h
+++ b/src/gis/IGisLine.h
@@ -16,21 +16,20 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPMAP_H
-#define CMAPMAP_H
+#ifndef IGISLINE_H
+#define IGISLINE_H
 
-#include "map/IMap.h"
+class QPolygonF;
 
-class CMapDraw;
-
-class CMapMAP : public IMap
+class IGisLine
 {
     public:
-        CMapMAP(const QString& filename, CMapDraw *parent);
-        virtual ~CMapMAP();
+        IGisLine();
+        virtual ~IGisLine();
 
-        void draw(IDrawContext::buffer_t& buf);
+        virtual void setData(const QPolygonF& line) = 0;
+        virtual void getData(QPolygonF& line) = 0;
 };
 
-#endif //CMAPMAP_H
+#endif //IGISLINE_H
 
diff --git a/src/gis/IGisWidget.ui b/src/gis/IGisWidget.ui
index 95668ec..c94920a 100644
--- a/src/gis/IGisWidget.ui
+++ b/src/gis/IGisWidget.ui
@@ -34,8 +34,14 @@
      <property name="contextMenuPolicy">
       <enum>Qt::CustomContextMenu</enum>
      </property>
+     <property name="dragEnabled">
+      <bool>true</bool>
+     </property>
+     <property name="dragDropMode">
+      <enum>QAbstractItemView::InternalMove</enum>
+     </property>
      <property name="selectionMode">
-      <enum>QAbstractItemView::ExtendedSelection</enum>
+      <enum>QAbstractItemView::SingleSelection</enum>
      </property>
      <property name="iconSize">
       <size>
diff --git a/src/gis/WptIcons.cpp b/src/gis/WptIcons.cpp
index 90296c2..4730fb1 100644
--- a/src/gis/WptIcons.cpp
+++ b/src/gis/WptIcons.cpp
@@ -50,6 +50,9 @@ void initWptIcons()
     wptIcons["Blue Diamond"]        = icon_t("://icons/waypoints/32x32/DiamondBlue.png", 16, 16);
     wptIcons["Green Diamond"]       = icon_t("://icons/waypoints/32x32/DiamondGreen.png", 16, 16);
     wptIcons["Red Diamond"]         = icon_t("://icons/waypoints/32x32/DiamondRed.png", 16, 16);
+    wptIcons["Parking Area"]        = icon_t("://icons/cache/32x32/parking.png", 16, 16);
+    wptIcons["Trailhead"]           = icon_t("://icons/cache/32x32/trailhead.png", 16, 16);
+    wptIcons["Waypoint"]            = icon_t("://icons/waypoints/32x32/Waypoint.png", 16, 16);
 
 
     setWptIconByName("Traditional Cache", "://icons/cache/32x32/traditional.png");
diff --git a/src/gis/ovl/CDetailsOvlArea.cpp b/src/gis/ovl/CDetailsOvlArea.cpp
new file mode 100644
index 0000000..ffda13d
--- /dev/null
+++ b/src/gis/ovl/CDetailsOvlArea.cpp
@@ -0,0 +1,269 @@
+/**********************************************************************************************
+    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/ovl/CDetailsOvlArea.h"
+#include "gis/ovl/CGisItemOvlArea.h"
+#include "helpers/CTextEditWidget.h"
+#include "GeoMath.h"
+
+
+#include <QtWidgets>
+
+CDetailsOvlArea::CDetailsOvlArea(CGisItemOvlArea &area, QWidget * parent)
+    : QDialog(parent)
+    , area(area)
+{
+    setupUi(this);
+
+    QPixmap icon(64,24);
+    for(int i=0; i < OVL_N_COLORS; ++i)
+    {
+        icon.fill(CGisItemOvlArea::lineColors[i]);
+        comboColor->addItem(icon,"",CGisItemOvlArea::lineColors[i]);
+    }
+
+    for(int i = 0; i < OVL_N_STYLES; i++)
+    {
+        icon.fill(Qt::white);
+        QPainter p(&icon);
+        p.setPen(Qt::black);
+        p.setBrush(CGisItemOvlArea::brushStyles[i]);
+        p.drawRect(icon.rect());
+
+        comboStyle->addItem(icon,"",(int)CGisItemOvlArea::brushStyles[i]);
+    }
+
+
+    for(int i = 0; i < OVL_N_WIDTHS; i++)
+    {
+        comboBorderWidth->addItem(CGisItemOvlArea::lineWidths[i].string, CGisItemOvlArea::lineWidths[i].width);
+    }
+
+    setupGui();
+
+    connect(comboColor, SIGNAL(currentIndexChanged(int)), this, SLOT(slotSetColor(int)));
+    connect(comboBorderWidth, SIGNAL(currentIndexChanged(int)), this, SLOT(slotSetWidth(int)));
+    connect(comboStyle, SIGNAL(currentIndexChanged(int)), this, SLOT(slotSetStyle(int)));
+    connect(checkOpacity, SIGNAL(toggled(bool)), this, SLOT(slotOpyacity(bool)));
+    connect(toolLock, SIGNAL(toggled(bool)), this, SLOT(slotChangeReadOnlyMode(bool)));
+    connect(textCmtDesc, SIGNAL(anchorClicked(QUrl)), this, SLOT(slotLinkActivated(QUrl)));
+    connect(labelName, SIGNAL(linkActivated(QString)), this, SLOT(slotLinkActivated(QString)));
+}
+
+CDetailsOvlArea::~CDetailsOvlArea()
+{
+
+}
+
+
+void CDetailsOvlArea::slotSetColor(int idx)
+{
+    if(area.isReadOnly())
+    {
+        return;
+    }
+
+    area.setColor(idx);
+    setupGui();
+}
+
+void CDetailsOvlArea::slotSetWidth(int idx)
+{
+    if(area.isReadOnly())
+    {
+        return;
+    }
+    area.setWidth(CGisItemOvlArea::lineWidths[idx].width);
+    setupGui();
+}
+
+void CDetailsOvlArea::slotSetStyle(int idx)
+{
+    if(area.isReadOnly())
+    {
+        return;
+    }
+
+    area.setStyle(CGisItemOvlArea::brushStyles[idx]);
+    setupGui();
+}
+
+void CDetailsOvlArea::slotOpyacity(bool yes)
+{
+    if(area.isReadOnly())
+    {
+        return;
+    }
+
+    area.setOpacity(yes);
+    setupGui();
+}
+
+void CDetailsOvlArea::slotChangeReadOnlyMode(bool on)
+{
+    area.setReadOnlyMode(on);
+    setupGui();
+}
+
+void CDetailsOvlArea::slotLinkActivated(const QString& link)
+{
+    if(link == "name")
+    {
+        QString name = QInputDialog::getText(0, tr("Edit name..."), tr("Enter new waypoint name."), QLineEdit::Normal, area.getName());
+        if(name.isEmpty())
+        {
+            return;
+        }
+        area.setName(name);
+    }
+
+    setupGui();
+}
+
+void CDetailsOvlArea::slotLinkActivated(const QUrl& url)
+{
+    if(url.toString() == "comment")
+    {
+        CTextEditWidget dlg(0);
+        dlg.setHtml(area.getComment());
+        if(dlg.exec() == QDialog::Accepted)
+        {
+            area.setComment(dlg.getHtml());
+            setupGui();
+        }
+
+    }
+    else if(url.toString() == "description")
+    {
+        CTextEditWidget dlg(0);
+        dlg.setHtml(area.getDescription());
+        if(dlg.exec() == QDialog::Accepted)
+        {
+            area.setDescription(dlg.getHtml());
+            setupGui();
+        }
+    }
+    else
+    {
+        QDesktopServices::openUrl(url);
+    }
+}
+
+
+QString CDetailsOvlArea::toLink(bool isReadOnly, const QString& href, const QString& str)
+{
+    if(isReadOnly)
+    {
+        return QString("%1").arg(str);
+    }
+
+    return QString("<a href='%1'>%2</a>").arg(href).arg(str);
+}
+
+void CDetailsOvlArea::setupGui()
+{
+    bool isReadOnly = area.isReadOnly();
+    setWindowTitle(area.getName());
+
+    if(area.isTainted())
+    {
+        labelTainted->show();
+    }
+    else
+    {
+        labelTainted->hide();
+    }
+
+    textHistory->clear();
+    if(!area.getHistory().isEmpty())
+    {
+        foreach(const QString& entry, area.getHistory())
+        {
+            textHistory->append(entry);
+        }
+    }
+
+    toolLock->setChecked(isReadOnly);
+
+    labelName->setText(toLink(isReadOnly, "name", area.getName()));
+
+    comboColor->setCurrentIndex(area.getColorIdx());
+    comboColor->setEnabled(!isReadOnly);
+    comboBorderWidth->setCurrentIndex(comboBorderWidth->findData(area.getWidth()));
+    comboBorderWidth->setEnabled(!isReadOnly);
+    comboStyle->setCurrentIndex(comboStyle->findData(area.getStyle()));
+    comboStyle->setEnabled(!isReadOnly);
+    checkOpacity->setChecked(area.getOpacity());
+    checkOpacity->setEnabled(!isReadOnly);
+
+    textCmtDesc->document()->clear();
+
+    foreach(const IGisItem::link_t& link, area.getLinks())
+    {
+        QString str = QString("<p><a href='%1'>%2</a></p>").arg(link.uri.toString()).arg(link.text);
+        textCmtDesc->append(str);
+    }
+
+    textCmtDesc->append(toLink(isReadOnly, "comment", tr("<h4>Comment:</h4>")));
+    if(IGisItem::removeHtml(area.getComment()).simplified().isEmpty())
+    {
+        textCmtDesc->append(tr("<p>--- no comment ---</p>"));
+    }
+    else
+    {
+        textCmtDesc->append(area.getComment());
+    }
+
+    textCmtDesc->append(toLink(isReadOnly, "description", tr("<h4>Description:</h4>")));
+    if(IGisItem::removeHtml(area.getDescription()).simplified().isEmpty())
+    {
+        textCmtDesc->append(tr("<p>--- no description ---</p>"));
+    }
+    else
+    {
+        textCmtDesc->append(area.getDescription());
+    }
+    textCmtDesc->moveCursor (QTextCursor::Start) ;
+    textCmtDesc->ensureCursorVisible() ;
+
+
+    int idx = 0;
+    QList<QTreeWidgetItem*> items;
+    const CGisItemOvlArea::area_t& a = area.getAreaData();
+    foreach(const CGisItemOvlArea::pt_t& pt, a.pts)
+    {
+        QString str;
+        QTreeWidgetItem * item = new QTreeWidgetItem();
+
+        item->setText(eColNum,QString::number(idx++));
+
+        // position
+        GPS_Math_Deg_To_Str(pt.lon, pt.lat, str);
+        item->setText(eColPosition,str);
+
+        items << item;
+
+    }
+
+    treeWidget->clear();
+    treeWidget->addTopLevelItems(items);
+    treeWidget->header()->resizeSections(QHeaderView::ResizeToContents);
+
+
+}
+
diff --git a/src/gis/wpt/CDetailsWpt.h b/src/gis/ovl/CDetailsOvlArea.h
similarity index 60%
copy from src/gis/wpt/CDetailsWpt.h
copy to src/gis/ovl/CDetailsOvlArea.h
index b160919..7df4b31 100644
--- a/src/gis/wpt/CDetailsWpt.h
+++ b/src/gis/ovl/CDetailsOvlArea.h
@@ -16,32 +16,44 @@
 
 **********************************************************************************************/
 
-#ifndef CDETAILSWPT_H
-#define CDETAILSWPT_H
+#ifndef CDETAILSOVLAREA_H
+#define CDETAILSOVLAREA_H
 
 #include <QDialog>
-#include "ui_IDetailsWpt.h"
+#include "ui_IDetailsOvlArea.h"
 
-class CGisItemWpt;
+class CGisItemOvlArea;
 
-class CDetailsWpt : public QDialog, private Ui::IDetailsWpt
-{    
+class CDetailsOvlArea : public QDialog, private Ui::IDetailsOvlArea
+{
     Q_OBJECT
     public:
-        CDetailsWpt(CGisItemWpt& wpt, QWidget * parent);
-        virtual ~CDetailsWpt();
+        CDetailsOvlArea(CGisItemOvlArea &area, QWidget * parent);
+        virtual ~CDetailsOvlArea();
 
     private slots:
-        void slotLinkActivated(const QString& link);
-        void slotChangeIcon();
-        void slotChangeCmt();
-        void slotChangeDesc();
+        void slotSetColor(int idx);
+        void slotSetWidth(int idx);
+        void slotSetStyle(int idx);
+        void slotOpyacity(bool yes);
         void slotChangeReadOnlyMode(bool on);
+        void slotLinkActivated(const QUrl& url);
+        void slotLinkActivated(const QString& link);
+
 
     private:
         void setupGui();
-        CGisItemWpt& wpt;
+        enum columns_t
+        {
+            eColNum
+            ,eColPosition
+            ,eColMax
+        };
+
+        QString toLink(bool isReadOnly, const QString& href, const QString& str);
+
+        CGisItemOvlArea& area;
 };
 
-#endif //CDETAILSWPT_H
+#endif //CDETAILSOVLAREA_H
 
diff --git a/src/gis/ovl/CGisItemOvlArea.cpp b/src/gis/ovl/CGisItemOvlArea.cpp
new file mode 100644
index 0000000..f28afe4
--- /dev/null
+++ b/src/gis/ovl/CGisItemOvlArea.cpp
@@ -0,0 +1,574 @@
+/**********************************************************************************************
+    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/ovl/CGisItemOvlArea.h"
+#include "gis/ovl/CScrOptOvlArea.h"
+#include "gis/ovl/CDetailsOvlArea.h"
+#include "gis/CGisProject.h"
+#include "gis/CGisDraw.h"
+
+#include <QtWidgets>
+#include <proj_api.h>
+
+#define DEFAULT_COLOR       4
+#define MIN_DIST_CLOSE_TO   10
+
+
+const QColor CGisItemOvlArea::lineColors[OVL_N_COLORS] =
+{
+     Qt::black                    // 0
+    ,Qt::darkRed                 // 1
+    ,Qt::darkGreen               // 2
+    ,Qt::darkYellow              // 3
+    ,Qt::darkBlue                // 4
+    ,Qt::darkMagenta             // 5
+    ,Qt::darkCyan                // 6
+    ,Qt::gray                    // 7
+    ,Qt::darkGray                // 8
+    ,Qt::red                     // 9
+    ,Qt::green                   // 10
+    ,Qt::yellow                  // 11
+    ,Qt::blue                    // 12
+    ,Qt::magenta                 // 13
+    ,Qt::cyan                    // 14
+    ,Qt::white                   // 15
+    ,Qt::transparent             // 16
+};
+
+const QString CGisItemOvlArea::bulletColors[OVL_N_COLORS] =
+{
+
+                                 // 0
+    QString("://icons/8x8/bullet_black.png")
+                                 // 1
+    ,QString("://icons/8x8/bullet_dark_red.png")
+                                 // 2
+    ,QString("://icons/8x8/bullet_dark_green.png")
+                                 // 3
+    ,QString("://icons/8x8/bullet_dark_yellow.png")
+                                 // 4
+    ,QString("://icons/8x8/bullet_dark_blue.png")
+                                 // 5
+    ,QString("://icons/8x8/bullet_dark_magenta.png")
+                                 // 6
+    ,QString("://icons/8x8/bullet_dark_cyan.png")
+                                 // 7
+    ,QString("://icons/8x8/bullet_gray.png")
+                                 // 8
+    ,QString("://icons/8x8/bullet_dark_gray.png")
+                                 // 9
+    ,QString("://icons/8x8/bullet_red.png")
+                                 // 10
+    ,QString("://icons/8x8/bullet_green.png")
+                                 // 11
+    ,QString("://icons/8x8/bullet_yellow.png")
+                                 // 12
+    ,QString("://icons/8x8/bullet_blue.png")
+                                 // 13
+    ,QString("://icons/8x8/bullet_magenta.png")
+                                 // 14
+    ,QString("://icons/8x8/bullet_cyan.png")
+                                 // 15
+    ,QString("://icons/8x8/bullet_white.png")
+    ,QString("")                 // 16
+};
+
+
+const CGisItemOvlArea::width_t CGisItemOvlArea::lineWidths[OVL_N_WIDTHS] =
+{
+    {3, QObject::tr("thin")}
+    ,{5, QObject::tr("normal")}
+    ,{9, QObject::tr("wide")}
+    ,{13, QObject::tr("strong")}
+};
+
+const Qt::BrushStyle CGisItemOvlArea::brushStyles[OVL_N_STYLES] =
+{
+    Qt::NoBrush
+    , Qt::HorPattern
+    , Qt::VerPattern
+    , Qt::CrossPattern
+    , Qt::BDiagPattern
+    , Qt::FDiagPattern
+    , Qt::DiagCrossPattern
+    , Qt::SolidPattern
+};
+
+
+QString CGisItemOvlArea::keyUserFocus;
+
+CGisItemOvlArea::CGisItemOvlArea(const QPolygonF& line, const QString &name, CGisProject * project, int idx)
+    : IGisItem(project, eTypeOvl, idx)
+    , penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , penBackground(Qt::white, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+{
+    area.name = name;
+    readLine(line);
+
+    flags |=  eFlagCreatedInQms|eFlagWriteAllowed;
+
+    setColor(str2color(""));
+    setText(1, "*");
+    setText(0, area.name);
+    setToolTip(0, getInfo());
+    genKey();
+    project->setText(1,"*");
+}
+
+CGisItemOvlArea::CGisItemOvlArea(const CGisItemOvlArea& parentArea, CGisProject * project, int idx)
+    : IGisItem(project, eTypeTrk, idx)
+    , penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , penBackground(Qt::white, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+{
+    *this = parentArea;
+
+    setText(1, "*");
+    setText(0, area.name);
+    setToolTip(0, getInfo());
+    key.clear();
+    genKey();
+    project->setText(1,"*");
+}
+
+CGisItemOvlArea::CGisItemOvlArea(const QDomNode &xml, CGisProject *project)
+    : IGisItem(project, eTypeOvl, project->childCount())
+    , penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , penBackground(Qt::white, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+{
+    // --- start read and process data ----
+    setColor(penForeground.color());
+    readArea(xml, area);
+    // --- stop read and process data ----
+    setText(0, area.name);
+    setToolTip(0, getInfo());
+    genKey();
+
+}
+
+CGisItemOvlArea::~CGisItemOvlArea()
+{
+    // reset user focus if focused on this track
+    if(key == keyUserFocus)
+    {
+        keyUserFocus.clear();
+    }
+
+}
+
+void CGisItemOvlArea::genKey()
+{
+    if(key.isEmpty())
+    {
+        QCryptographicHash md5(QCryptographicHash::Md5);
+        md5.addData((const char*)&area, sizeof(area));
+        key = md5.result().toHex();
+    }
+}
+
+bool CGisItemOvlArea::isCloseTo(const QPointF& pos)
+{
+    foreach(const QPointF& pt, line)
+    {
+        if((pt - pos).manhattanLength() < MIN_DIST_CLOSE_TO)
+        {
+            return true;
+        }
+    }
+    return false;
+}
+
+QPointF CGisItemOvlArea::getPointCloseBy(const QPoint& screenPos)
+{
+    qint32 i    = 0;
+    qint32 idx  = -1;
+    qint32  d   = NOINT;
+    foreach(const QPointF& point, line)
+    {
+        int tmp = (screenPos - point).manhattanLength();
+        if(tmp < d)
+        {
+            idx = i;
+            d   = tmp;
+        }
+        i++;
+    }
+
+    if(idx < 0)
+    {
+        return NOPOINTF;
+    }
+
+    return line[idx];
+}
+
+void CGisItemOvlArea::readLine(const QPolygonF &line)
+{
+    area.pts.clear();
+    area.pts.resize(line.size());
+
+    for(int i = 0; i < line.size(); i++)
+    {
+        pt_t& areapt        = area.pts[i];
+        const QPointF& pt   = line[i];
+
+        areapt.lon = pt.x() * RAD_TO_DEG;
+        areapt.lat = pt.y() * RAD_TO_DEG;
+    }
+
+    deriveSecondaryData();
+}
+
+void CGisItemOvlArea::readArea(const QDomNode& xml, area_t& area)
+{
+    readXml(xml, "ql:name", area.name);
+    readXml(xml, "ql:cmt", area.cmt);
+    readXml(xml, "ql:desc", area.desc);
+    readXml(xml, "ql:src", area.src);
+    readXml(xml, "ql:link", area.links);
+    readXml(xml, "ql:number", area.number);
+    readXml(xml, "ql:type", area.type);
+    readXml(xml, "ql:color", area.color);
+    readXml(xml, "ql:width", area.width);
+    readXml(xml, "ql:style", area.style);
+    readXml(xml, "ql:opacity", area.opacity);
+    readXml(xml, "ql:key", key);
+    readXml(xml, "ql:flags", flags);
+    readXml(xml, history);
+
+
+
+    const QDomNodeList& xmlPts = xml.toElement().elementsByTagName("ql:point");
+    int M = xmlPts.count();
+    area.pts.resize(M);
+    for(int m = 0; m < M; ++m)
+    {
+        pt_t& pt = area.pts[m];
+        const QDomNode& xmlPt = xmlPts.item(m);
+        readWpt(xmlPt, pt);
+    }
+
+
+    setColor(str2color(area.color));
+
+    deriveSecondaryData();
+}
+
+void CGisItemOvlArea::save(QDomNode& gpx)
+{
+    QDomDocument doc = gpx.ownerDocument();
+
+    QDomElement xmlArea = doc.createElement("ql:area");
+    gpx.appendChild(xmlArea);
+
+    writeXml(xmlArea, "ql:name", area.name);
+    writeXml(xmlArea, "ql:cmt", area.cmt);
+    writeXml(xmlArea, "ql:desc", area.desc);
+    writeXml(xmlArea, "ql:src", area.src);
+    writeXml(xmlArea, "ql:link", area.links);
+    writeXml(xmlArea, "ql:number", area.number);
+    writeXml(xmlArea, "ql:type", area.type);
+    writeXml(xmlArea, "ql:color", area.color);
+    writeXml(xmlArea, "ql:width", area.width);
+    writeXml(xmlArea, "ql:style", area.style);
+    writeXml(xmlArea, "ql:opacity", area.opacity);
+    writeXml(xmlArea, "ql:key", key);
+    writeXml(xmlArea, "ql:flags", flags);
+    writeXml(xmlArea, history);
+
+
+    foreach(const pt_t& pt, area.pts)
+    {
+        QDomElement xmlPt = doc.createElement("ql:point");
+        xmlArea.appendChild(xmlPt);
+        writeWpt(xmlPt, pt);
+    }
+
+    setText(1, "");
+
+}
+
+void CGisItemOvlArea::edit()
+{
+    CDetailsOvlArea dlg(*this, 0);
+    dlg.exec();
+
+    deriveSecondaryData();
+}
+
+void CGisItemOvlArea::deriveSecondaryData()
+{
+    qreal north = -90;
+    qreal east  = -180;
+    qreal south =  90;
+    qreal west  =  180;
+
+    foreach(const pt_t& pt, area.pts)
+    {
+        if(pt.lon < west)  west    = pt.lon;
+        if(pt.lon > east)  east    = pt.lon;
+        if(pt.lat < south) south   = pt.lat;
+        if(pt.lat > north) north   = pt.lat;
+    }
+
+    boundingRect = QRectF(QPointF(west * DEG_TO_RAD, north * DEG_TO_RAD), QPointF(east * DEG_TO_RAD,south * DEG_TO_RAD));
+}
+
+void CGisItemOvlArea::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, CGisDraw * gis)
+{
+    line.clear();
+    if(!viewport.intersects(boundingRect))
+    {
+        return;
+    }
+
+    QPointF pt1;
+
+    foreach(const pt_t& pt, area.pts)
+    {
+        pt1.setX(pt.lon);
+        pt1.setY(pt.lat);
+        pt1 *= DEG_TO_RAD;
+        line << pt1;
+    }
+
+    gis->convertRad2Px(line);
+
+    p.setOpacity(area.opacity ? 0.3 : 1.0);
+
+    penBackground.setWidth(area.width + 2);
+    p.setBrush(Qt::NoBrush);
+    p.setPen(penBackground);
+    p.drawPolygon(line);
+
+    penForeground.setColor(color);
+    penForeground.setWidth(area.width);
+    p.setBrush(QBrush(color, (Qt::BrushStyle)area.style));
+    p.setPen(penForeground);
+    p.drawPolygon(line);
+
+}
+
+void CGisItemOvlArea::drawLabel(QPainter& p, const QRectF& viewport,QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis)
+{
+    if(line.isEmpty())
+    {
+        return;
+    }
+    QPointF pt  = getPolygonCentroid(line);
+    QRectF rect = fm.boundingRect(area.name);
+    rect.adjust(-2,-2,2,2);
+    rect.moveCenter(pt);
+
+    CCanvas::drawText(getName(), p, pt.toPoint(), Qt::darkBlue);
+    blockedAreas << rect;
+}
+
+void CGisItemOvlArea::drawHighlight(QPainter& p)
+{
+    if(line.isEmpty() || key == keyUserFocus)
+    {
+        return;
+    }
+    p.setPen(QPen(QColor(255,0,0,100),11,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+    p.drawPolygon(line);
+
+}
+
+void CGisItemOvlArea::gainUserFocus(bool yes)
+{
+    keyUserFocus = yes ? key : "";
+}
+
+QPointF CGisItemOvlArea::getPolygonCentroid(const QPolygonF& polygon)
+{
+    int i, len;
+    qreal x = 0, y = 0;
+
+    len = polygon.size();
+
+    for(i = 0; i < len; i++)
+    {
+        x = x + polygon[i].x();
+        y = y + polygon[i].y();
+    }
+    x = x / len;
+    y = y / len;
+
+    return QPointF(x,y);
+}
+
+IScrOpt * CGisItemOvlArea::getScreenOptions(const QPoint& origin, IMouse * mouse)
+{
+    if(scrOpt.isNull())
+    {
+        scrOpt = new CScrOptOvlArea(this, origin, mouse);
+    }
+    return scrOpt;
+}
+
+const QString& CGisItemOvlArea::getName()
+{
+    return area.name;
+}
+
+QString CGisItemOvlArea::getInfo()
+{
+    QString str = getName();
+
+    QString desc = removeHtml(area.desc).simplified();
+    if(desc.count())
+    {
+        if(!str.isEmpty()) str += "<br/>\n";
+
+        if(desc.count() < 200)
+        {
+            str += desc;
+        }
+        else
+        {
+            str += desc.left(197) + "...";
+        }
+    }
+    else
+    {
+        QString cmt = removeHtml(area.cmt).simplified();
+        if(cmt.count())
+        {
+            if(!str.isEmpty()) str += "<br/>\n";
+
+            if(cmt.count() < 200)
+            {
+                str += cmt;
+            }
+            else
+            {
+                str += cmt.left(197) + "...";
+            }
+        }
+    }
+
+    return str;
+}
+
+void CGisItemOvlArea::getData(QPolygonF& line)
+{    
+    line.clear();
+    foreach(const pt_t& pt, area.pts)
+    {
+        line << QPointF(pt.lon * DEG_TO_RAD, pt.lat * DEG_TO_RAD);
+    }
+}
+
+void CGisItemOvlArea::setData(const QPolygonF& line)
+{
+    readLine(line);
+
+    flags |= eFlagTainted;
+    setText(1,"*");
+    setToolTip(0, getInfo());
+    parent()->setText(1,"*");
+    changed(QObject::tr("Changed area shape."));
+}
+
+void CGisItemOvlArea::setName(const QString& str)
+{
+    setText(0, str);
+    area.name = str;
+    changed(QObject::tr("Changed name."));
+}
+
+void CGisItemOvlArea::setWidth(qint32 w)
+{
+    area.width = w;
+    changed(QObject::tr("Changed border width."));
+}
+
+void CGisItemOvlArea::setStyle(qint32 s)
+{
+    area.style = s;
+    changed(QObject::tr("Changed fill pattern."));
+}
+
+void CGisItemOvlArea::setOpacity(bool yes)
+{
+    area.opacity = yes;
+    changed(QObject::tr("Changed opacity."));
+}
+
+void CGisItemOvlArea::setComment(const QString& str)
+{
+    area.cmt = str;
+    changed(QObject::tr("Changed comment."));
+}
+
+void CGisItemOvlArea::setDescription(const QString& str)
+{
+    area.desc = str;
+    changed(QObject::tr("Changed description."));
+}
+
+
+void CGisItemOvlArea::setColor(int idx)
+{
+    int N = sizeof(lineColors)/sizeof(QColor);
+    if(idx >= N)
+    {
+        return;
+    }
+    setColor(lineColors[idx]);
+    changed(QObject::tr("Changed color"));
+}
+
+void CGisItemOvlArea::setColor(const QColor& c)
+{
+    int n;
+    int N = sizeof(lineColors)/sizeof(QColor);
+
+    for(n = 0; n < N; n++)
+    {
+        if(lineColors[n] == c)
+        {
+            colorIdx    = n;
+            color       = lineColors[n];
+            bullet      = QPixmap(bulletColors[n]);
+            break;
+        }
+    }
+
+    if(n == N)
+    {
+        colorIdx    = DEFAULT_COLOR;
+        color       = lineColors[DEFAULT_COLOR];
+        bullet      = QPixmap(bulletColors[DEFAULT_COLOR]);
+    }
+
+    setIcon(color.name());
+}
+
+void CGisItemOvlArea::setIcon(const QString& c)
+{
+    area.color   = c;
+    icon        = QPixmap("://icons/48x48/Area.png");
+
+    QPixmap mask( icon.size() );
+    mask.fill( str2color(c) );
+    mask.setMask( icon.createMaskFromColor( Qt::transparent ) );
+    icon = mask.scaled(22,22, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+
+    QTreeWidgetItem::setIcon(0,icon);
+}
diff --git a/src/gis/ovl/CGisItemOvlArea.h b/src/gis/ovl/CGisItemOvlArea.h
new file mode 100644
index 0000000..bfc40e7
--- /dev/null
+++ b/src/gis/ovl/CGisItemOvlArea.h
@@ -0,0 +1,148 @@
+/**********************************************************************************************
+    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/>.
+
+**********************************************************************************************/
+
+#ifndef CGISITEMOVLAREA_H
+#define CGISITEMOVLAREA_H
+
+#include "gis/IGisItem.h"
+#include "gis/IGisLine.h"
+
+#include <QPen>
+#include <QPointer>
+
+class CGisProject;
+class CScrOptOvlArea;
+
+#define OVL_N_COLORS 17
+#define OVL_N_WIDTHS 4
+#define OVL_N_STYLES 8
+
+class CGisItemOvlArea : public IGisItem, public IGisLine
+{
+    public:
+        CGisItemOvlArea(const QPolygonF& line, const QString &name, CGisProject * project, int idx);
+        CGisItemOvlArea(const CGisItemOvlArea &parentArea, CGisProject * project, int idx);
+        CGisItemOvlArea(const QDomNode &xml, CGisProject *project);
+        virtual ~CGisItemOvlArea();
+
+        const QString& getName();
+        int getColorIdx(){return colorIdx;}
+        QString getInfo();
+        void getData(QPolygonF& line);
+        const QString& getComment(){return area.cmt;}
+        const QString& getDescription(){return area.desc;}
+        const QList<link_t>& getLinks(){return area.links;}
+        qint32 getWidth(){return area.width;}
+        qint32 getStyle(){return area.style;}
+        bool getOpacity(){return area.opacity;}
+
+
+        void setName(const QString& str);
+        void setColor(int idx);
+        void setData(const QPolygonF& line);
+        void setWidth(qint32 w);
+        void setStyle(qint32 s);
+        void setOpacity(bool yes);
+        void setComment(const QString& str);
+        void setDescription(const QString& str);
+
+
+        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 drawHighlight(QPainter& p);
+
+        IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
+        QPointF getPointCloseBy(const QPoint& screenPos);
+        bool isCloseTo(const QPointF& pos);
+
+        void gainUserFocus(bool yes);
+
+        struct width_t
+        {
+            int width;
+            QString string;
+        };
+
+        static const QColor  lineColors[OVL_N_COLORS];
+        static const QString bulletColors[OVL_N_COLORS];
+        static const width_t lineWidths[OVL_N_WIDTHS];
+        static const Qt::BrushStyle brushStyles[OVL_N_STYLES];
+    protected:
+        void genKey();
+
+
+    public:
+
+        struct pt_t : public wpt_t
+        {
+            pt_t(){}
+        };
+
+        struct area_t
+        {
+            area_t() : number(0), width(5), style(Qt::BDiagPattern), opacity(false) {}
+            // -- all gpx tags - start
+            QString name;
+            QString cmt;
+            QString desc;
+            QString src;
+            QList<link_t> links;
+            quint64 number;
+            QString type;
+            QVector<pt_t> pts;
+            QString color;
+            qint32 width;
+            qint32 style;
+            bool opacity;
+        };
+
+        const area_t& getAreaData() const{return area;}
+
+    private:
+        void readArea(const QDomNode& xml, area_t& area);
+        void setColor(const QColor& c);
+        void setIcon(const QString& c);
+        void readLine(const QPolygonF &line);
+        void deriveSecondaryData();
+        QPointF getPolygonCentroid(const QPolygonF& polygon);
+
+        area_t area;
+
+        static QString keyUserFocus;
+
+        QPen penForeground;
+        QPen penBackground;
+
+        /// the track line color
+        QColor  color;
+        /// the trakpoint bullet icon
+        QPixmap bullet;
+        /// the track line color by index
+        unsigned colorIdx;
+
+        QPolygonF line;
+
+        QPointer<CScrOptOvlArea>  scrOpt;
+
+};
+
+#endif //CGISITEMOVLAREA_H
+
diff --git a/src/gis/trk/CScrOptTrk.cpp b/src/gis/ovl/CScrOptOvlArea.cpp
similarity index 62%
copy from src/gis/trk/CScrOptTrk.cpp
copy to src/gis/ovl/CScrOptOvlArea.cpp
index 98666a7..874db8f 100644
--- a/src/gis/trk/CScrOptTrk.cpp
+++ b/src/gis/ovl/CScrOptOvlArea.cpp
@@ -16,43 +16,57 @@
 
 **********************************************************************************************/
 
-#include "gis/trk/CScrOptTrk.h"
-#include "gis/trk/CGisItemTrk.h"
+#include "gis/ovl/CScrOptOvlArea.h"
+#include "gis/ovl/CGisItemOvlArea.h"
 #include "gis/CGisWidget.h"
-#include "mouse/IMouse.h"
 #include "canvas/CCanvas.h"
+#include "mouse/IMouse.h"
 #include "CMainWindow.h"
 
-CScrOptTrk::CScrOptTrk(CGisItemTrk * trk, const QPoint& origin, IMouse *parent)
+CScrOptOvlArea::CScrOptOvlArea(CGisItemOvlArea *area, const QPoint &point, IMouse *parent)
     : IScrOpt(parent->getCanvas())
-    , key(trk->getKey())
+    , key(area->getKey())
+
 {
     setupUi(this);
-    setOrigin(origin);
+    setOrigin(point);
     label->setFont(CMainWindow::self().getMapFont());
-    label->setText(trk->getInfo());
-
-
-    anchor = trk->getPointCloseBy(origin);
-    move(anchor.toPoint() + QPoint(30,30));
+    label->setText(area->getInfo());
     adjustSize();
+
+    anchor = area->getPointCloseBy(point);
+    move(anchor.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
     show();
 
+    connect(toolEditDetails, SIGNAL(clicked()), this, SLOT(slotEditDetails()));
     connect(toolDelete, SIGNAL(clicked()), this, SLOT(slotDelete()));
+    connect(toolEdit, SIGNAL(clicked()), this, SLOT(slotEdit()));
 }
 
-CScrOptTrk::~CScrOptTrk()
+CScrOptOvlArea::~CScrOptOvlArea()
 {
 
 }
 
-void CScrOptTrk::slotDelete()
+void CScrOptOvlArea::slotEditDetails()
+{
+    CGisWidget::self().editItemByKey(key);
+    deleteLater();
+}
+
+void CScrOptOvlArea::slotDelete()
 {
     CGisWidget::self().delItemByKey(key);
+    deleteLater();
 }
 
+void CScrOptOvlArea::slotEdit()
+{
+    CGisWidget::self().editAreaByKey(key);
+    deleteLater();
+}
 
-void CScrOptTrk::draw(QPainter& p)
+void CScrOptOvlArea::draw(QPainter& p)
 {
     IGisItem * item = CGisWidget::self().getItemByKey(key);
     if(item == 0)
@@ -62,21 +76,5 @@ void CScrOptTrk::draw(QPainter& p)
     }
     item->drawHighlight(p);
 
-
-    QRectF r = rect();
-    r.moveTopLeft(QPoint(x(), y()));
-    QPainterPath path1;
-    path1.addRoundedRect(r,5,5);
-
-    QPolygonF poly2;
-    poly2 << anchor << (r.topLeft() + QPointF(10,0)) << (r.topLeft() + QPointF(0,10)) << anchor;
-    QPainterPath path2;
-    path2.addPolygon(poly2);
-
-    path1 = path1.united(path2);
-
-    p.setPen(CCanvas::penBorderGray);
-    p.setBrush(CCanvas::brushBackWhite);
-    p.drawPolygon(path1.toFillPolygon());
-
+    drawBubble2(anchor, p);
 }
diff --git a/src/gis/wpt/CScrOptWpt.h b/src/gis/ovl/CScrOptOvlArea.h
similarity index 76%
copy from src/gis/wpt/CScrOptWpt.h
copy to src/gis/ovl/CScrOptOvlArea.h
index 227364d..6b2d37f 100644
--- a/src/gis/wpt/CScrOptWpt.h
+++ b/src/gis/ovl/CScrOptOvlArea.h
@@ -16,36 +16,34 @@
 
 **********************************************************************************************/
 
-#ifndef CSCROPTWPT_H
-#define CSCROPTWPT_H
+#ifndef CSCROPTOVLAREA_H
+#define CSCROPTOVLAREA_H
 
 #include "mouse/IScrOpt.h"
+#include "ui_IScrOptOvlArea.h"
 
-#include <QWidget>
-#include "ui_IScrOptWpt.h"
-
-class CGisItemWpt;
+class CGisItemOvlArea;
 class IMouse;
 
-class CScrOptWpt : public IScrOpt , private Ui::IScrOptWpt
+class CScrOptOvlArea : public IScrOpt, private Ui::IScrOptOvlArea
 {
     Q_OBJECT
     public:
-        CScrOptWpt(CGisItemWpt * wpt, const QPoint &origin, IMouse *parent);
-        virtual ~CScrOptWpt();
+        CScrOptOvlArea(CGisItemOvlArea * area, const QPoint &point, IMouse *parent);
+        virtual ~CScrOptOvlArea();
 
         void draw(QPainter& p);
 
     private slots:
+        void slotEditDetails();
         void slotDelete();
         void slotEdit();
-        void slotMove();
-        void slotProj();
 
     private:
         QString key;
         QPointF anchor;
+
 };
 
-#endif //CSCROPTWPT_H
+#endif //CSCROPTOVLAREA_H
 
diff --git a/src/gis/ovl/IDetailsOvlArea.ui b/src/gis/ovl/IDetailsOvlArea.ui
new file mode 100644
index 0000000..b22edfa
--- /dev/null
+++ b/src/gis/ovl/IDetailsOvlArea.ui
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IDetailsOvlArea</class>
+ <widget class="QDialog" name="IDetailsOvlArea">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>500</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</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>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="labelName">
+       <property name="text">
+        <string>-</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="labelTainted">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>32</width>
+         <height>32</height>
+        </size>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="pixmap">
+        <pixmap resource="../../resources.qrc">:/icons/32x32/Tainted.png</pixmap>
+       </property>
+       <property name="scaledContents">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolLock">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../resources.qrc">
+         <normaloff>:/icons/32x32/UnLock.png</normaloff>
+         <normalon>:/icons/32x32/Lock.png</normalon>:/icons/32x32/UnLock.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+       <property name="checkable">
+        <bool>true</bool>
+       </property>
+       <property name="autoRaise">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QLabel" name="labelColor">
+         <property name="text">
+          <string>Color</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="comboColor">
+         <property name="iconSize">
+          <size>
+           <width>64</width>
+           <height>24</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item row="0" column="1">
+      <layout class="QHBoxLayout" name="horizontalLayout_4">
+       <item>
+        <widget class="QLabel" name="label_4">
+         <property name="text">
+          <string>Border width</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="comboBorderWidth"/>
+       </item>
+      </layout>
+     </item>
+     <item row="1" column="0">
+      <layout class="QHBoxLayout" name="horizontalLayout_3">
+       <item>
+        <widget class="QLabel" name="label_5">
+         <property name="text">
+          <string>Style</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="comboStyle">
+         <property name="iconSize">
+          <size>
+           <width>64</width>
+           <height>24</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item row="1" column="1">
+      <widget class="QCheckBox" name="checkOpacity">
+       <property name="text">
+        <string>Opacity</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QTextBrowser" name="textCmtDesc">
+     <property name="openLinks">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTabWidget" name="tabWidget">
+     <property name="currentIndex">
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="tab">
+      <attribute name="title">
+       <string>Points</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <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="treeWidget">
+         <column>
+          <property name="text">
+           <string notr="true">#</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Position</string>
+          </property>
+         </column>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_2">
+      <attribute name="title">
+       <string>Hist.</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_3">
+       <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="QTextBrowser" name="textHistory"/>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/IScrOptTrk.ui b/src/gis/ovl/IScrOptOvlArea.ui
similarity index 74%
copy from src/gis/trk/IScrOptTrk.ui
copy to src/gis/ovl/IScrOptOvlArea.ui
index 8d6ca91..c2e9c59 100644
--- a/src/gis/trk/IScrOptTrk.ui
+++ b/src/gis/ovl/IScrOptOvlArea.ui
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
- <class>IScrOptTrk</class>
- <widget class="QWidget" name="IScrOptTrk">
+ <class>IScrOptOvlArea</class>
+ <widget class="QWidget" name="IScrOptOvlArea">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>300</width>
-    <height>65</height>
+    <width>171</width>
+    <height>69</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -36,12 +36,6 @@
      </property>
      <item>
       <widget class="QToolButton" name="toolEditDetails">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
-       <property name="toolTip">
-        <string><html><head/><body><p>View details &amp; Edit</p></body></html></string>
-       </property>
        <property name="text">
         <string>...</string>
        </property>
@@ -53,9 +47,6 @@
      </item>
      <item>
       <widget class="QToolButton" name="toolDelete">
-       <property name="toolTip">
-        <string><html><head/><body><p>Delete</p></body></html></string>
-       </property>
        <property name="text">
         <string>...</string>
        </property>
@@ -66,13 +57,34 @@
       </widget>
      </item>
      <item>
+      <widget class="Line" name="line">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolEdit">
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../resources.qrc">
+         <normaloff>:/icons/32x32/AreaMove.png</normaloff>:/icons/32x32/AreaMove.png</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
       <spacer name="horizontalSpacer">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Expanding</enum>
+       </property>
        <property name="sizeHint" stdset="0">
         <size>
-         <width>40</width>
+         <width>1</width>
          <height>20</height>
         </size>
        </property>
@@ -85,9 +97,6 @@
      <property name="text">
       <string>TextLabel</string>
      </property>
-     <property name="textFormat">
-      <enum>Qt::AutoText</enum>
-     </property>
     </widget>
    </item>
   </layout>
diff --git a/src/gis/rte/CGisItemRte.cpp b/src/gis/rte/CGisItemRte.cpp
index e1f194f..1720edd 100644
--- a/src/gis/rte/CGisItemRte.cpp
+++ b/src/gis/rte/CGisItemRte.cpp
@@ -30,8 +30,29 @@
 const QPen CGisItemRte::penBackground(Qt::white, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
 QString CGisItemRte::keyUserFocus;
 
+/// used to create a copy of route with new parent
+CGisItemRte::CGisItemRte(const CGisItemRte& parentRte, CGisProject * project, int idx)
+    : IGisItem(project, eTypeRte, idx)
+    , penForeground(Qt::magenta, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+{
+    *this = parentRte;
+
+    icon = QPixmap("://icons/32x32/Route.png").scaled(22,22, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+
+    setText(1, "*");
+    setText(0, rte.name);
+    setIcon(0, icon);
+    setToolTip(0, getInfo());
+
+    key.clear();
+    genKey();
+
+    project->setText(1,"*");
+}
+
+/// used to create route from GPX file
 CGisItemRte::CGisItemRte(const QDomNode& xml, CGisProject * parent)
-    : IGisItem(parent)
+    : IGisItem(parent, eTypeRte, parent->childCount())
     , penForeground(Qt::magenta, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)    
 {
     // --- start read and process data ----
@@ -44,11 +65,13 @@ CGisItemRte::CGisItemRte(const QDomNode& xml, CGisProject * parent)
     genKey();
 }
 
+
 CGisItemRte::~CGisItemRte()
 {
 
 }
 
+
 void CGisItemRte::genKey()
 {
     if(key.isEmpty())
@@ -175,9 +198,9 @@ bool CGisItemRte::isCloseTo(const QPointF& pos)
     return false;
 }
 
-void CGisItemRte::gainUserFocus()
+void CGisItemRte::gainUserFocus(bool yes)
 {
-    keyUserFocus = key;
+    keyUserFocus = yes ? key : "";
 }
 
 
@@ -198,10 +221,7 @@ void CGisItemRte::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &b
     foreach(const rtept_t& rtept, rte.pts)
     {
         QPointF pt(rtept.lon * DEG_TO_RAD, rtept.lat * DEG_TO_RAD);
-        //        if(!viewport.contains(pt))
-        //        {
-        //            return;
-        //        }
+
         gis->convertRad2Px(pt);
 
         line << pt;
@@ -240,10 +260,7 @@ void CGisItemRte::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF> &
     {
 
         QPointF pt(rtept.lon * DEG_TO_RAD, rtept.lat * DEG_TO_RAD);
-//        if(!viewport.contains(pt))
-//        {
-//            return;
-//        }
+
         gis->convertRad2Px(pt);
         pt = pt - rtept.focus;
         p.drawPixmap(pt, rtept.icon);
diff --git a/src/gis/rte/CGisItemRte.h b/src/gis/rte/CGisItemRte.h
index 84e9eb6..9716e7c 100644
--- a/src/gis/rte/CGisItemRte.h
+++ b/src/gis/rte/CGisItemRte.h
@@ -20,18 +20,21 @@
 #define CGISITEMRTE_H
 
 #include "gis/IGisItem.h"
+#include "gis/IGisLine.h"
 
 #include <QPen>
 
 class QDomNode;
 class CGisProject;
 
-class CGisItemRte : public IGisItem
+class CGisItemRte : public IGisItem, public IGisLine
 {
     public:
         CGisItemRte(const QDomNode &xml, CGisProject *parent);
+        CGisItemRte(const CGisItemRte& parentRte, CGisProject * project, int idx);
         virtual ~CGisItemRte();
 
+
         const QString& getName(){return rte.name;}
         QString getInfo();
         IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
@@ -41,7 +44,10 @@ class CGisItemRte : public IGisItem
         void drawHighlight(QPainter& p);
         void save(QDomNode& gpx);
         bool isCloseTo(const QPointF& pos);
-        void gainUserFocus();
+        void gainUserFocus(bool yes);
+
+        void setData(const QPolygonF& line){}
+        void getData(QPolygonF& line){}
 
     private:
         struct rte_t;
diff --git a/src/gis/rte/CScrOptRte.cpp b/src/gis/rte/CScrOptRte.cpp
index a6c46fd..63610cd 100644
--- a/src/gis/rte/CScrOptRte.cpp
+++ b/src/gis/rte/CScrOptRte.cpp
@@ -23,19 +23,18 @@
 #include "canvas/CCanvas.h"
 #include "CMainWindow.h"
 
-CScrOptRte::CScrOptRte(CGisItemRte *rte, const QPoint& origin, IMouse *parent)
+CScrOptRte::CScrOptRte(CGisItemRte *rte, const QPoint& point, IMouse *parent)
     : IScrOpt(parent->getCanvas())
     , key(rte->getKey())
 {
     setupUi(this);
-    setOrigin(origin);
+    setOrigin(point);
     label->setFont(CMainWindow::self().getMapFont());
     label->setText(rte->getInfo());
-
-
-    anchor = rte->getPointCloseBy(origin);
-    move(anchor.toPoint() + QPoint(30,30));
     adjustSize();
+
+    anchor = rte->getPointCloseBy(point);
+    move(anchor.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
     show();
 
     connect(toolDelete, SIGNAL(clicked()), this, SLOT(slotDelete()));
@@ -62,21 +61,5 @@ void CScrOptRte::draw(QPainter& p)
     }
     item->drawHighlight(p);
 
-
-    QRectF r = rect();
-    r.moveTopLeft(QPoint(x(), y()));
-    QPainterPath path1;
-    path1.addRoundedRect(r,5,5);
-
-    QPolygonF poly2;
-    poly2 << anchor << (r.topLeft() + QPointF(10,0)) << (r.topLeft() + QPointF(0,10)) << anchor;
-    QPainterPath path2;
-    path2.addPolygon(poly2);
-
-    path1 = path1.united(path2);
-
-    p.setPen(CCanvas::penBorderGray);
-    p.setBrush(CCanvas::brushBackWhite);
-    p.drawPolygon(path1.toFillPolygon());
-
+    drawBubble2(anchor, p);
 }
diff --git a/src/gis/rte/CScrOptRte.h b/src/gis/rte/CScrOptRte.h
index 45c9b3d..d3f6633 100644
--- a/src/gis/rte/CScrOptRte.h
+++ b/src/gis/rte/CScrOptRte.h
@@ -31,7 +31,7 @@ class CScrOptRte : public IScrOpt, private Ui::IScrOptRte
 {
     Q_OBJECT
     public:
-        CScrOptRte(CGisItemRte * rte, const QPoint &origin, IMouse *parent);
+        CScrOptRte(CGisItemRte * rte, const QPoint &point, IMouse *parent);
         virtual ~CScrOptRte();
 
         void draw(QPainter& p);
diff --git a/src/gis/trk/CDetailsTrk.cpp b/src/gis/trk/CDetailsTrk.cpp
new file mode 100644
index 0000000..d61151f
--- /dev/null
+++ b/src/gis/trk/CDetailsTrk.cpp
@@ -0,0 +1,320 @@
+/**********************************************************************************************
+    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/CDetailsTrk.h"
+#include "helpers/CSettings.h"
+#include "units/IUnit.h"
+#include "GeoMath.h"
+
+#include <QtWidgets>
+#include <proj_api.h>
+
+CDetailsTrk::CDetailsTrk(CGisItemTrk& trk, QWidget *parent)
+    : QWidget(parent)
+    , trk(trk)
+{
+    setupUi(this);
+    setupGui();
+
+    QPixmap icon(16,8);
+    for(int i=0; i < TRK_N_COLORS; ++i)
+    {
+        icon.fill(CGisItemTrk::lineColors[i]);
+        comboColor->addItem(icon,"",CGisItemTrk::lineColors[i]);
+    }
+
+    lineName->setText(trk.getName());
+    comboColor->setCurrentIndex(trk.getColorIdx());
+
+    plotElevation->setTrack(&trk);
+    plotDistance->setTrack(&trk);
+    plotSpeed->setTrack(&trk);
+    plotTrack->setTrack(&trk);
+
+    SETTINGS;
+    cfg.beginGroup("TrackDetails");
+    checkProfile->setChecked(cfg.value("showProfile", true).toBool());
+    checkSpeed->setChecked(cfg.value("showSpeed", true).toBool());
+    checkProgress->setChecked(cfg.value("showProgress", true).toBool());
+    cfg.endGroup();
+
+    connect(checkProfile, SIGNAL(clicked()), this, SLOT(slotShowPlots()));
+    connect(checkSpeed, SIGNAL(clicked()), this, SLOT(slotShowPlots()));
+    connect(checkProgress, SIGNAL(clicked()), this, SLOT(slotShowPlots()));
+    connect(comboColor, SIGNAL(currentIndexChanged(int)), this, SLOT(slotColorChanged(int)));
+    connect(lineName, SIGNAL(returnPressed()), this, SLOT(slotNameChanged()));
+    connect(lineName, SIGNAL(textChanged(QString)), this, SLOT(slotNameChanged(QString)));
+    connect(toolLock, SIGNAL(toggled(bool)), this, SLOT(slotChangeReadOnlyMode(bool)));
+    connect(treeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(slotItemSelectionChanged()));
+
+
+    slotShowPlots();
+
+}
+
+CDetailsTrk::~CDetailsTrk()
+{
+    SETTINGS;
+    cfg.beginGroup("TrackDetails");
+    cfg.setValue("showProfile", checkProfile->isChecked());
+    cfg.setValue("showSpeed", checkSpeed->isChecked());
+    cfg.setValue("showProgress", checkProgress->isChecked());
+    cfg.endGroup();
+}
+
+void CDetailsTrk::setupGui()
+{
+    QString str, val, unit;
+
+    bool isReadOnly = trk.isReadOnly();
+
+    if(trk.isTainted())
+    {
+        labelTainted->show();
+    }
+    else
+    {
+        labelTainted->hide();
+    }
+
+    labelInfo->setText(trk.getInfo());
+    lineName->setEnabled(!isReadOnly);
+    comboColor->setEnabled(!isReadOnly);
+    toolLock->setChecked(isReadOnly);
+
+    QList<QTreeWidgetItem*> items;
+    const CGisItemTrk::trk_t& t = trk.getTrackData();
+    foreach (const CGisItemTrk::trkseg_t& seg, t.segs)
+    {
+        foreach(const CGisItemTrk::trkpt_t& trkpt, seg.pts)
+        {
+
+            QTreeWidgetItem * item = new QTreeWidgetItem();
+            item->setTextAlignment(eColNum,Qt::AlignLeft);
+            item->setTextAlignment(eColEle,Qt::AlignRight);
+            item->setTextAlignment(eColDelta,Qt::AlignRight);
+            item->setTextAlignment(eColDist,Qt::AlignRight);
+            item->setTextAlignment(eColAscend,Qt::AlignRight);
+            item->setTextAlignment(eColDescend,Qt::AlignRight);
+            item->setTextAlignment(eColSpeed,Qt::AlignRight);
+
+
+            if(trkpt.flags & CGisItemTrk::trkpt_t::eDeleted)
+            {
+                for(int i = 0; i < eColMax; i++)
+                {
+                    item->setForeground(i,QBrush(Qt::gray));
+                }
+            }
+            else
+            {
+                for(int i = 0; i < eColMax; i++)
+                {
+                    item->setForeground(i,QBrush(Qt::black));
+                }
+            }
+
+            item->setText(eColNum,QString::number(trkpt.idx));
+            if(trkpt.time.isValid())
+            {
+                item->setText(eColTime, IUnit::self().datetime2string(trkpt.time, true, QPointF(trkpt.lon, trkpt.lat)*DEG_TO_RAD));
+            }
+            else
+            {
+                item->setText(eColTime, "-");
+            }
+
+            if(trkpt.ele != NOINT)
+            {
+                IUnit::self().meter2elevation(trkpt.ele, val, unit);
+                str = tr("%1 %2").arg(val).arg(unit);
+            }
+            else
+            {
+                str = "-";
+            }
+            item->setText(eColEle,str);
+
+            IUnit::self().meter2distance(trkpt.deltaDistance, val, unit);
+            item->setText(eColDelta, tr("%1 %2").arg(val).arg(unit));
+
+            IUnit::self().meter2distance(trkpt.distance, val, unit);
+            item->setText(eColDist, tr("%1 %2").arg(val).arg(unit));
+
+            // speed
+            if(trkpt.speed != NOFLOAT)
+            {
+                IUnit::self().meter2speed(trkpt.speed, val, unit);
+                str = tr("%1 %2").arg(val).arg(unit);
+            }
+            else
+            {
+                str = "-";
+            }
+            item->setText(eColSpeed,str);
+
+            if(trkpt.slope1 != NOFLOAT)
+            {
+                str = QString("%1°(%2%)").arg(trkpt.slope1,2,'f',0).arg(trkpt.slope2,2,'f',0);
+            }
+            else
+            {
+                str = "-";
+            }
+            item->setText(eColSlope,str);
+
+            IUnit::self().meter2elevation(trkpt.ascend, val, unit);
+            item->setText(eColAscend, tr("%1 %2").arg(val).arg(unit));
+            IUnit::self().meter2elevation(trkpt.descend, val, unit);
+            item->setText(eColDescend, tr("%1 %2").arg(val).arg(unit));
+
+            // position
+            GPS_Math_Deg_To_Str(trkpt.lon, trkpt.lat, str);
+            item->setText(eColPosition,str);
+
+            items << item;
+
+        }
+    }
+
+    treeWidget->clear();
+    treeWidget->addTopLevelItems(items);
+    treeWidget->header()->resizeSections(QHeaderView::ResizeToContents);
+
+    if(!trk.getHistory().isEmpty())
+    {
+        textHistory->clear();
+        foreach(const QString& entry, trk.getHistory())
+        {
+            textHistory->append(entry);
+        }
+    }
+}
+
+void CDetailsTrk::setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt)
+{
+    if(pt != 0)
+    {
+        plotTrack->setMouseMoveFocus(pt->lon, pt->lat);
+        labelInfoTrkPt->setText(trk.getInfoTrkPt(*pt));
+        labelInfoProgress->setText(trk.getInfoProgress(*pt));
+    }
+    else
+    {
+        labelInfoTrkPt->setText("-\n-");
+        labelInfoProgress->setText("-\n-");
+    }
+}
+
+void CDetailsTrk::setMouseClickFocus(const CGisItemTrk::trkpt_t * pt)
+{
+    if(pt != 0)
+    {
+        treeWidget->blockSignals(true);
+        treeWidget->setCurrentItem(treeWidget->topLevelItem(pt->idx));
+        treeWidget->blockSignals(false);
+    }
+}
+
+void CDetailsTrk::slotShowPlots()
+{
+    if(checkProfile->isChecked())
+    {
+        plotElevation->show();
+    }
+    else
+    {
+        plotElevation->hide();
+    }
+
+    if(checkSpeed->isChecked())
+    {
+        plotSpeed->show();
+    }
+    else
+    {
+        plotSpeed->hide();
+    }
+
+    if(checkProgress->isChecked())
+    {
+        plotDistance->show();
+    }
+    else
+    {
+        plotDistance->hide();
+    }
+}
+
+void CDetailsTrk::slotColorChanged(int idx)
+{
+    if(trk.getColorIdx() != idx)
+    {
+        trk.setColor(idx);
+    }
+    setupGui();
+}
+
+void CDetailsTrk::slotChangeReadOnlyMode(bool on)
+{
+    trk.setReadOnlyMode(on);
+    setupGui();
+
+}
+
+void CDetailsTrk::slotNameChanged(const QString& name)
+{
+    QPalette palette = lineName->palette();
+    if(trk.getName() != name)
+    {
+        palette.setColor(QPalette::Base, QColor(255, 128, 128));
+    }
+    else
+    {
+        palette.setColor(QPalette::Base, QColor(255, 255, 255));
+    }
+    lineName->setPalette(palette);
+}
+
+
+void CDetailsTrk::slotNameChanged()
+{
+    QString  name  = lineName->text();
+    QString _name_ = trk.getName();
+
+    QPalette palette = lineName->palette();
+
+    if(_name_ != name)
+    {
+        trk.setName(name);
+        palette.setColor(QPalette::Base, QColor(128, 255, 128));
+    }
+
+    lineName->setPalette(palette);
+    setupGui();
+}
+
+void CDetailsTrk::slotItemSelectionChanged()
+{
+    QTreeWidgetItem * item = treeWidget->currentItem();
+    if(item != 0)
+    {
+        quint32 idx = item->text(eColNum).toUInt();
+        trk.setMouseFocusByIndex(idx, CGisItemTrk::eFocusMouseMove);
+    }
+}
diff --git a/src/gis/trk/CDetailsTrk.h b/src/gis/trk/CDetailsTrk.h
new file mode 100644
index 0000000..558b222
--- /dev/null
+++ b/src/gis/trk/CDetailsTrk.h
@@ -0,0 +1,73 @@
+/**********************************************************************************************
+    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/>.
+
+**********************************************************************************************/
+
+#ifndef CDETAILSTRK_H
+#define CDETAILSTRK_H
+
+#include <QWidget>
+#include "ui_IDetailsTrk.h"
+
+class CGisItemTrk;
+
+class CDetailsTrk : public QWidget, private Ui::IDetailsTrk
+{
+    Q_OBJECT
+    public:
+        CDetailsTrk(CGisItemTrk &trk, QWidget * parent);
+        virtual ~CDetailsTrk();
+
+        void setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt);
+        void setMouseClickFocus(const CGisItemTrk::trkpt_t * pt);
+
+    private slots:
+        void slotShowPlots();
+        void slotColorChanged(int idx);
+        void slotChangeReadOnlyMode(bool on);
+        void slotNameChanged();
+        void slotNameChanged(const QString& name);
+        void slotItemSelectionChanged();
+
+    private:
+        void setupGui();
+
+        enum columns_t
+        {
+            eColNum
+            ,eColTime
+            ,eColEle
+            ,eColDelta
+            ,eColDist
+            ,eColSpeed
+            ,eColSlope
+            ,eColAscend
+            ,eColDescend
+            ,eColPosition
+            ,eColMax
+        };
+
+        /**
+           @brief Pointer to track item
+
+           It is ok to store the pointer as this widget is created by the track item. The
+           track item will destroy this object on it's own destruction.
+        */
+        CGisItemTrk& trk;
+};
+
+#endif //CDETAILSTRK_H
+
diff --git a/src/gis/trk/CGisItemTrk.cpp b/src/gis/trk/CGisItemTrk.cpp
index 1dd0ecc..b22b741 100644
--- a/src/gis/trk/CGisItemTrk.cpp
+++ b/src/gis/trk/CGisItemTrk.cpp
@@ -1,4 +1,4 @@
-/**********************************************************************************************
+/**********************************************************************************************
     Copyright (C) 2014 Oliver Eichler oliver.eichler at gmx.de
 
     This program is free software: you can redistribute it and/or modify
@@ -18,8 +18,11 @@
 
 #include "gis/trk/CGisItemTrk.h"
 #include "gis/trk/CScrOptTrk.h"
+#include "gis/trk/CDetailsTrk.h"
 #include "gis/CGisProject.h"
 #include "gis/CGisDraw.h"
+#include "plot/IPlot.h"
+#include "CMainWindow.h"
 #include "GeoMath.h"
 
 #include <QtXml>
@@ -28,8 +31,10 @@
 
 #define ASCEND_THRESHOLD    5
 #define DEFAULT_COLOR       4
+#define MIN_DIST_CLOSE_TO   10
+#define MIN_DIST_FOCUS      40
 
-const QColor CGisItemTrk::lineColors[] =
+const QColor CGisItemTrk::lineColors[TRK_N_COLORS] =
 {
      Qt::black                    // 0
     ,Qt::darkRed                 // 1
@@ -50,52 +55,145 @@ const QColor CGisItemTrk::lineColors[] =
     ,Qt::transparent             // 16
 };
 
-const QString CGisItemTrk::bulletColors[] =
+const QString CGisItemTrk::bulletColors[TRK_N_COLORS] =
 {
 
                                  // 0
-    QString("icons/8x8/bullet_black.png")
+    QString("://icons/8x8/bullet_black.png")
                                  // 1
-    ,QString("icons/8x8/bullet_dark_red.png")
+    ,QString("://icons/8x8/bullet_dark_red.png")
                                  // 2
-    ,QString("icons/8x8/bullet_dark_green.png")
+    ,QString("://icons/8x8/bullet_dark_green.png")
                                  // 3
-    ,QString("icons/8x8/bullet_dark_yellow.png")
+    ,QString("://icons/8x8/bullet_dark_yellow.png")
                                  // 4
-    ,QString("icons/8x8/bullet_dark_blue.png")
+    ,QString("://icons/8x8/bullet_dark_blue.png")
                                  // 5
-    ,QString("icons/8x8/bullet_dark_magenta.png")
+    ,QString("://icons/8x8/bullet_dark_magenta.png")
                                  // 6
-    ,QString("icons/8x8/bullet_dark_cyan.png")
+    ,QString("://icons/8x8/bullet_dark_cyan.png")
                                  // 7
-    ,QString("icons/8x8/bullet_gray.png")
+    ,QString("://icons/8x8/bullet_gray.png")
                                  // 8
-    ,QString("icons/8x8/bullet_dark_gray.png")
+    ,QString("://icons/8x8/bullet_dark_gray.png")
                                  // 9
-    ,QString("icons/8x8/bullet_red.png")
+    ,QString("://icons/8x8/bullet_red.png")
                                  // 10
-    ,QString("icons/8x8/bullet_green.png")
+    ,QString("://icons/8x8/bullet_green.png")
                                  // 11
-    ,QString("icons/8x8/bullet_yellow.png")
+    ,QString("://icons/8x8/bullet_yellow.png")
                                  // 12
-    ,QString("icons/8x8/bullet_blue.png")
+    ,QString("://icons/8x8/bullet_blue.png")
                                  // 13
-    ,QString("icons/8x8/bullet_magenta.png")
+    ,QString("://icons/8x8/bullet_magenta.png")
                                  // 14
-    ,QString("icons/8x8/bullet_cyan.png")
+    ,QString("://icons/8x8/bullet_cyan.png")
                                  // 15
-    ,QString("icons/8x8/bullet_white.png")
+    ,QString("://icons/8x8/bullet_white.png")
     ,QString("")                 // 16
 };
 
+
+
 const QPen CGisItemTrk::penBackground(Qt::white, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
 
 QString CGisItemTrk::keyUserFocus;
 
-CGisItemTrk::CGisItemTrk(const QDomNode& xml, CGisProject * parent)
-    : IGisItem(parent)
+/// used to create a new track from a part of an existing track
+CGisItemTrk::CGisItemTrk(quint32 idx1, quint32 idx2, const trk_t& srctrk, CGisProject * project)
+    : IGisItem(project, eTypeTrk, -1)
     , penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
-{    
+    , mouseMoveFocus(0)
+    , mouseClickFocus(0)
+{
+    flags = eFlagCreatedInQms|eFlagWriteAllowed;
+
+    foreach(const trkseg_t& srcseg, srctrk.segs)
+    {
+        trkseg_t seg;
+        foreach(const trkpt_t& srcpt, srcseg.pts)
+        {
+            if(srcpt.idx < idx1)
+            {
+                continue;
+            }
+            if(srcpt.idx > idx2)
+            {
+                break;
+            }
+
+            seg.pts << srcpt;
+        }
+
+        if(!seg.pts.isEmpty())
+        {
+            trk.segs << seg;
+        }
+    }
+
+    trk.name    = srctrk.name + QString(" (%1 - %2)").arg(idx1).arg(idx2);
+    trk.cmt     = srctrk.cmt;
+    trk.desc    = srctrk.desc;
+    trk.src     = srctrk.src;
+    trk.links   = srctrk.links;
+    trk.number  = srctrk.number;
+    trk.type    = srctrk.type;
+
+    deriveSecondaryData();
+
+    setColor(str2color(srctrk.color));
+    setText(1, "*");
+    setText(0, trk.name);
+    setToolTip(0, getInfo());
+    genKey();
+
+    project->setText(1,"*");
+}
+
+/// used to create a copy of track with new parent
+CGisItemTrk::CGisItemTrk(const CGisItemTrk& parentTrk, CGisProject * project, int idx)
+    : IGisItem(project, eTypeTrk, idx)
+    , penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , mouseMoveFocus(0)
+    , mouseClickFocus(0)
+{
+    *this = parentTrk;
+
+    setText(1, "*");
+    setText(0, trk.name);
+    setToolTip(0, getInfo());
+    key.clear();
+    genKey();
+    project->setText(1,"*");
+}
+
+/// usd to create a track from a line of coordinates
+CGisItemTrk::CGisItemTrk(const QPolygonF& line, const QString& name, CGisProject * project, int idx)
+    : IGisItem(project, eTypeTrk, idx)
+    , penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , mouseMoveFocus(0)
+    , mouseClickFocus(0)
+{
+    trk.name = name;
+    readLine(line);
+
+    flags |=  eFlagCreatedInQms|eFlagWriteAllowed;
+
+    setColor(str2color(""));
+    setText(1, "*");
+    setText(0, trk.name);
+    setToolTip(0, getInfo());
+    genKey();
+    project->setText(1,"*");
+}
+
+/// used to create track from GPX file
+CGisItemTrk::CGisItemTrk(const QDomNode& xml, CGisProject * project)
+    : IGisItem(project, eTypeTrk, project->childCount())
+    , penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , mouseMoveFocus(0)
+    , mouseClickFocus(0)
+{        
     // --- start read and process data ----
     setColor(penForeground.color());
     readTrk(xml, trk);
@@ -107,9 +205,95 @@ CGisItemTrk::CGisItemTrk(const QDomNode& xml, CGisProject * parent)
 
 CGisItemTrk::~CGisItemTrk()
 {
+    // reset user focus if focused on this track
+    if(key == keyUserFocus)
+    {
+        keyUserFocus.clear();
+    }
+
+    /**
+        Delete all registerd plot as they can't exist without the item.
+        As the plot objects will unregister via unregisterPlot() in their
+        destructor things will get a bit complicated here. Better create
+        a copy of the list befor we start to delete.
+    */
+    qDeleteAll(registeredPlots.toList());
+
+    delete dlgDetails;
+}
+
+
+void CGisItemTrk::setData(const QPolygonF &line)
+{
+    /*
+        as this will change the line significantly we better stop
+        all focus operations and close the detail dialog.
+    */
+    mouseClickFocus = 0;
+    mouseMoveFocus  = 0;
+    delete dlgDetails;
+
+    readLine(line);
+
+    flags |= eFlagTainted;
+    setText(1,"*");
+    setToolTip(0, getInfo());
+    parent()->setText(1,"*");    
+    changed(QObject::tr("Changed trackpoints, sacrificed all previous data."));
+}
+
+void CGisItemTrk::getData(QPolygonF &line)
+{
+    line.clear();
+    foreach (const trkseg_t& seg, trk.segs)
+    {
+        foreach(const trkpt_t& pt, seg.pts)
+        {
+            if(pt.flags & trkpt_t::eDeleted)
+            {
+                continue;
+            }
+            line << QPointF(pt.lon * DEG_TO_RAD, pt.lat * DEG_TO_RAD);
+        }
+    }
+
+}
+
+void CGisItemTrk::readLine(const QPolygonF &line)
+{
+    trk.segs.clear();
+    trk.segs.resize(1);
+    trkseg_t& seg = trk.segs.first();
+
+    seg.pts.resize(line.size());
+
+    QPolygonF ele(line.size());
+    CMainWindow::self().getEelevationAt(line, ele);
+
+    for(int i = 0; i < line.size(); i++)
+    {
+        trkpt_t& trkpt      = seg.pts[i];
+        const QPointF& pt   = line[i];
+
+        trkpt.lon = pt.x() * RAD_TO_DEG;
+        trkpt.lat = pt.y() * RAD_TO_DEG;
+        trkpt.ele = ele[i].y();
+    }
+
+    deriveSecondaryData();
+}
+
+void CGisItemTrk::registerPlot(IPlot * plot)
+{
+    registeredPlots << plot;
+}
 
+void CGisItemTrk::unregisterPlot(IPlot * plot)
+{
+    registeredPlots.remove(plot);
 }
 
+
 void CGisItemTrk::genKey()
 {
     if(key.isEmpty())
@@ -166,12 +350,12 @@ QString CGisItemTrk::getInfo()
     if(timeStart.isValid())
     {
         str += "\n";
-        str += QObject::tr("Start: %1").arg(IUnit::datetime2string(timeStart, boundingRect.center()));
+        str += QObject::tr("Start: %1").arg(IUnit::datetime2string(timeStart, false, boundingRect.center()));
     }
     if(timeEnd.isValid())
     {
         str += "\n";
-        str += QObject::tr("End: %1").arg(IUnit::datetime2string(timeEnd, boundingRect.center()));
+        str += QObject::tr("End: %1").arg(IUnit::datetime2string(timeEnd, false, boundingRect.center()));
     }
 
     str += "\n";
@@ -181,35 +365,111 @@ QString CGisItemTrk::getInfo()
     return str;
 }
 
+QString CGisItemTrk::getInfoTrkPt(const trkpt_t& pt)
+{
+
+    QString str, val1, unit1;
+    str += IUnit::datetime2string(pt.time, false, QPointF(pt.lon, pt.lat) * DEG_TO_RAD) + "\n";
+    IUnit::self().meter2elevation(pt.ele, val1, unit1);
+    str += QObject::tr("Ele.: %1 %2").arg(val1).arg(unit1);
+    if(pt.slope1 != NOFLOAT)
+    {
+        str += QObject::tr(" slope: %1° (%2%)").arg(pt.slope1,2,'f',0).arg(pt.slope2, 2,'f',0);
+    }
+    if(pt.speed != NOFLOAT)
+    {
+        IUnit::self().meter2speed(pt.speed, val1, unit1);
+        str += QObject::tr(" speed: %1%2").arg(val1).arg(unit1);
+    }
+
+    return str;
+}
+
+QString CGisItemTrk::getInfoProgress(const trkpt_t& pt)
+{
+    QString str, val, unit;
+    if(pt.ascend != NOFLOAT)
+    {
+        IUnit::self().meter2elevation(pt.ascend, val, unit);
+        str += QObject::tr("Ascend: %1%2 (%3%)").arg(val).arg(unit).arg(pt.ascend * 100/totalAscend, 2,'f',0);
+    }
+    else
+    {
+        str += QObject::tr("Ascend: - (-)");
+    }
+
+    if(pt.descend != NOFLOAT)
+    {
+        IUnit::self().meter2elevation(pt.descend, val, unit);
+        str += QObject::tr(" Descend: %1%2 (%3%)").arg(val).arg(unit).arg(pt.descend * 100/totalDescend, 2,'f',0);
+    }
+    else
+    {
+        str += QObject::tr(" Descend: - (-) ");
+    }
+
+    str += "\n";
+    if(pt.distance != NOFLOAT)
+    {
+        IUnit::self().meter2distance(pt.distance, val, unit);
+        str += QObject::tr("Dist.: %1%2 (%3%)").arg(val).arg(unit).arg(pt.distance * 100/totalDistance, 2,'f',0);
+    }
+    else
+    {
+        str += QObject::tr("Dist.: - (-)");
+    }
+
+    if(pt.elapsedSeconds != NOFLOAT)
+    {
+        IUnit::self().seconds2time(pt.elapsedSecondsMoving, val, unit);
+        str += QObject::tr(" Moving: %1%2 (%3%)").arg(val).arg(unit).arg(pt.elapsedSecondsMoving * 100/totalElapsedSecondsMoving, 2,'f',0);
+    }
+    else
+    {
+        str += QObject::tr(" Moving: - (-) ");
+    }
+
+    return str;
+}
+
 IScrOpt * CGisItemTrk::getScreenOptions(const QPoint& origin, IMouse * mouse)
 {
-    return new CScrOptTrk(this, origin, mouse);
+    if(scrOpt.isNull())
+    {
+        scrOpt = new CScrOptTrk(this, origin, mouse);
+    }
+    return scrOpt;
 }
 
 QPointF CGisItemTrk::getPointCloseBy(const QPoint& screenPos)
 {
-    qint32 d    = NOINT;
-    QPointF pt  = NOPOINTF;
+    qint32 i    = 0;
+    qint32 idx  = -1;
+    qint32  d   = NOINT;
     foreach(const QPointF& point, line)
     {
         int tmp = (screenPos - point).manhattanLength();
         if(tmp < d)
         {
-            pt  = point;
+            idx = i;
             d   = tmp;
         }
+        i++;
     }
 
-    return pt;
+    if(idx < 0)
+    {
+        return NOPOINTF;
+    }
+
+    const trkpt_t * newPointOfFocus = getVisibleTrkPtByIndex(idx);
+    publishMouseFocus(newPointOfFocus, eFocusMouseClick, 0);
+
+    return line[idx];
 }
 
 void CGisItemTrk::readTrk(const QDomNode& xml, trk_t& trk)
 {
-    qreal north = -90;
-    qreal east  = -180;
-    qreal south =  90;
-    qreal west  =  180;
-
     readXml(xml, "name", trk.name);
     readXml(xml, "cmt", trk.cmt);
     readXml(xml, "desc", trk.desc);
@@ -240,27 +500,20 @@ void CGisItemTrk::readTrk(const QDomNode& xml, trk_t& trk)
             {
                 readXml(ext, "ql:flags", trkpt.flags);
             }
-
-            if(trkpt.lon < west)  west    = trkpt.lon;
-            if(trkpt.lon > east)  east    = trkpt.lon;
-            if(trkpt.lat < south) south   = trkpt.lat;
-            if(trkpt.lat > north) north   = trkpt.lat;
-
         }
     }
 
-    boundingRect = QRectF(QPointF(west * DEG_TO_RAD, north * DEG_TO_RAD), QPointF(east * DEG_TO_RAD,south * DEG_TO_RAD));
-
     // decode some well known extensions
     const QDomNode& ext = xml.namedItem("extensions");
     if(ext.isElement())
     {
-        QString str;
         readXml(ext, "ql:key", key);
+        readXml(ext, "ql:flags", flags);
+        readXml(ext, history);
 
         const QDomNode& gpxx = ext.namedItem("gpxx:TrackExtension");
-        readXml(gpxx, "gpxx:DisplayColor", str);
-        setColor(str2color(str));
+        readXml(gpxx, "gpxx:DisplayColor", trk.color);
+        setColor(str2color(trk.color));
     }
 
     deriveSecondaryData();
@@ -286,11 +539,13 @@ void CGisItemTrk::save(QDomNode& gpx)
     QDomElement xmlExt  = doc.createElement("extensions");
     xmlTrk.appendChild(xmlExt);
     writeXml(xmlExt, "ql:key", key);
+    writeXml(xmlExt, "ql:flags", flags);
+    writeXml(xmlExt, history);
 
     // write other well known extensions
     QDomElement gpxx  = doc.createElement("gpxx:TrackExtension");
     xmlExt.appendChild(gpxx);
-    writeXml(gpxx, "gpxx:DisplayColor", color2str(color));
+    writeXml(gpxx, "gpxx:DisplayColor", trk.color);
 
     foreach(const trkseg_t& seg, trk.segs)
     {
@@ -308,11 +563,18 @@ void CGisItemTrk::save(QDomNode& gpx)
             writeXml(xmlExt, "ql:flags", pt.flags);
         }
     }
+    setText(1, "");
 }
 
 
 void CGisItemTrk::deriveSecondaryData()
 {
+
+    qreal north = -90;
+    qreal east  = -180;
+    qreal south =  90;
+    qreal west  =  180;
+
     // reset all secondary data
     cntTotalPoints          = 0;
     cntVisiblePoints        = 0;
@@ -355,7 +617,7 @@ void CGisItemTrk::deriveSecondaryData()
         {
             trkpt_t& trkpt = seg.pts[p];
 
-            cntTotalPoints++;
+            trkpt.idx = cntTotalPoints++;
             if(trkpt.flags & trkpt_t::eDeleted)
             {
                 trkpt.reset();
@@ -363,6 +625,11 @@ void CGisItemTrk::deriveSecondaryData()
             }
             cntVisiblePoints++;
 
+            if(trkpt.lon < west)  west    = trkpt.lon;
+            if(trkpt.lon > east)  east    = trkpt.lon;
+            if(trkpt.lat < south) south   = trkpt.lat;
+            if(trkpt.lat > north) north   = trkpt.lat;
+
             if(lastTrkpt != 0)
             {
                 trkpt.deltaDistance     = GPS_Math_Distance(lastTrkpt->lon * DEG_TO_RAD, lastTrkpt->lat * DEG_TO_RAD, trkpt.lon * DEG_TO_RAD, trkpt.lat * DEG_TO_RAD);
@@ -427,6 +694,7 @@ void CGisItemTrk::deriveSecondaryData()
         }
     }
 
+    boundingRect = QRectF(QPointF(west * DEG_TO_RAD, north * DEG_TO_RAD), QPointF(east * DEG_TO_RAD,south * DEG_TO_RAD));
 
     // speed and slope (short average +-25m)
     for(int s = 0; s < trk.segs.size(); s++)
@@ -488,8 +756,9 @@ void CGisItemTrk::deriveSecondaryData()
                 n++;
             }
 
-            qreal a     = atan((e2 - e1)/(d2 - d1));
-            trkpt.slope = qAbs(a * 360.0/(2 * M_PI));
+            qreal a         = atan((e2 - e1)/(d2 - d1));
+            trkpt.slope1    = qAbs(a * 360.0/(2 * M_PI));
+            trkpt.slope2    = qTan(trkpt.slope1 * DEG_TO_RAD) * 100;
 
             if((t2 - t1) > 0)
             {
@@ -527,24 +796,53 @@ void CGisItemTrk::deriveSecondaryData()
 
 bool CGisItemTrk::isCloseTo(const QPointF& pos)
 {
-
     foreach(const QPointF& pt, line)
     {
-        if((pt - pos).manhattanLength() < 10)
+        if((pt - pos).manhattanLength() < MIN_DIST_CLOSE_TO)
         {
             return true;
         }
     }
-
     return false;
 }
 
-void CGisItemTrk::gainUserFocus()
+void CGisItemTrk::gainUserFocus(bool yes)
+{    
+    keyUserFocus = yes ? key : "";
+}
+
+void CGisItemTrk::edit()
 {
-    keyUserFocus = key;
+    if(dlgDetails.isNull())
+    {
+       dlgDetails = new CDetailsTrk(*this, 0);
+       dlgDetails->setObjectName(getName());
+    }
+
+    CMainWindow::self().addWidgetToTab(dlgDetails);
 }
 
 
+bool CGisItemTrk::cut()
+{
+    if(mouseClickFocus == 0)
+    {
+        return false;
+    }
+
+    CGisProject * project = dynamic_cast<CGisProject*>(parent());
+    if(project == 0)
+    {
+        return false;
+    }
+
+
+    new CGisItemTrk(0, mouseClickFocus->idx, trk, project);
+    new CGisItemTrk(mouseClickFocus->idx, cntTotalPoints-1, trk, project);
+
+    return true;
+}
+
 void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, CGisDraw *gis)
 {
     line.clear();
@@ -582,6 +880,15 @@ void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &b
     QList<QPolygonF> lines;
     splitLineToViewport(line, extViewport, lines);
 
+    if(key == keyUserFocus)
+    {
+        p.setPen(QPen(Qt::red,11,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+        foreach(const QPolygonF& l, lines)
+        {
+            p.drawPolyline(l);
+        }
+    }
+
     p.setBrush(color);
     p.setPen(penBackground);
     foreach(const QPolygonF& l, lines)
@@ -594,20 +901,114 @@ void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &b
     foreach(const QPolygonF& l, lines)
     {
         p.drawPolyline(l);
-    }
+    }    
 }
 
+void CGisItemTrk::drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis)
+{
+    if(hasUserFocus() && mouseMoveFocus)
+    {
+        // derive anchor
+        QPointF anchor(mouseMoveFocus->lon, mouseMoveFocus->lat);
+        anchor *= DEG_TO_RAD;
+        gis->convertRad2Px(anchor);
+
+        // create trackpoint info text
+        QString str, val1, unit1, val2, unit2;
+        str = getInfoTrkPt(*mouseMoveFocus);
+
+        // calculate bounding box of text
+        QFont f = CMainWindow::self().getMapFont();
+        QFontMetrics fm(f);
+        QRect rectText = fm.boundingRect(QRect(0,0,500,0), Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap, str);
+
+        // create info box
+        int w = rectText.width()  + 5 + 5;
+        int h = rectText.height() + 5 + 5 + 2*(fm.height() + 8);
+
+
+        QRect box(0, 0, w, h);
+        box.moveBottomLeft(anchor.toPoint() + QPoint(-50,-50));
+
+        // create bubble path
+        QPainterPath path1;
+        path1.addRoundedRect(box,5,5);
+
+        QPolygonF poly2;
+        poly2 << anchor << (box.bottomLeft() + QPointF(10,-5)) << (box.bottomLeft() + QPointF(30,-5)) << anchor;
+        QPainterPath path2;
+        path2.addPolygon(poly2);
+
+        path1 = path1.united(path2);
+
+        p.setFont(f);
+        // draw bubble
+        p.setPen(CCanvas::penBorderGray);
+        p.setBrush(CCanvas::brushBackWhite);
+        p.drawPolygon(path1.toFillPolygon());
+
+        p.save();
+        p.translate(box.topLeft());
+        // draw progress bar distance
+        p.translate(5,5);
+        QRect rectBar1(0,0,rectText.width(), 5);
+        p.setPen(Qt::black);
+        p.setBrush(Qt::NoBrush);
+        p.drawRect(rectBar1);
+        qreal d = mouseMoveFocus->distance * rectBar1.width() / totalDistance;
+        p.drawRect(d-1,-1, 3, 7);
+
+        IUnit::self().meter2distance(mouseMoveFocus->distance, val1, unit1);
+        IUnit::self().meter2distance(totalDistance - mouseMoveFocus->distance, val2, unit2);
+        p.setPen(Qt::darkBlue);
+        p.drawText(QRect(0,7,rectBar1.width(),fm.height()), Qt::AlignVCenter|Qt::AlignLeft, QString("%1%2").arg(val1).arg(unit1));
+        p.drawText(QRect(0,7,rectBar1.width(),fm.height()), Qt::AlignCenter, QString("%1%").arg(mouseMoveFocus->distance * 100 / totalDistance, 0, 'f', 0));
+        p.drawText(QRect(0,7,rectBar1.width(),fm.height()), Qt::AlignVCenter|Qt::AlignRight, QString("%1%2").arg(val2).arg(unit2));
+
+        // draw progress bar time
+        p.translate(0,fm.height() + 8);
+        QRect rectBar2(0,0,rectText.width(), 5);
+        p.setPen(Qt::black);
+        p.setBrush(Qt::NoBrush);
+        p.drawRect(rectBar2);
+        qreal t = mouseMoveFocus->elapsedSecondsMoving * rectBar2.width() / totalElapsedSecondsMoving;
+        p.drawRect(t-1,-1, 3, 7);
+
+        IUnit::self().seconds2time(mouseMoveFocus->elapsedSecondsMoving, val1, unit1);
+        IUnit::self().seconds2time(totalElapsedSecondsMoving - mouseMoveFocus->elapsedSecondsMoving, val2, unit2);
+        p.setPen(Qt::darkBlue);
+        p.drawText(QRect(0,7,rectBar1.width(),fm.height()), Qt::AlignVCenter|Qt::AlignLeft, QString("%1%2").arg(val1).arg(unit1));
+        p.drawText(QRect(0,7,rectBar1.width(),fm.height()), Qt::AlignCenter, QString("%1%").arg(mouseMoveFocus->elapsedSecondsMoving * 100 / totalElapsedSecondsMoving, 0, 'f', 0));
+        p.drawText(QRect(0,7,rectBar1.width(),fm.height()), Qt::AlignVCenter|Qt::AlignRight, QString("%1%2").arg(val2).arg(unit2));
+
+        // draw text
+        p.translate(0,fm.height() + 8);
+        p.setPen(Qt::darkBlue);
+        p.drawText(rectText, Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap,str);
+
+        p.restore();
+    }
 
+    if(!scrOpt.isNull() && mouseClickFocus)
+    {
+        QPointF anchor(mouseClickFocus->lon, mouseClickFocus->lat);
+        anchor *= DEG_TO_RAD;
+        gis->convertRad2Px(anchor);
+
+        p.drawPixmap(anchor - QPointF(4,4), QPixmap(bulletColors[colorIdx]));
+    }
+
+}
 
 void CGisItemTrk::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF> &blockedAreas, const QFontMetricsF &fm, CGisDraw *gis)
 {
-
+    // tracks have no labels
 }
 
 
 void CGisItemTrk::drawHighlight(QPainter& p)
 {
-    if(line.isEmpty())
+    if(line.isEmpty() || key == keyUserFocus)
     {
         return;
     }
@@ -615,7 +1016,23 @@ void CGisItemTrk::drawHighlight(QPainter& p)
     p.drawPolyline(line);
 }
 
+void CGisItemTrk::setName(const QString& str)
+{
+    setText(0, str);
+    trk.name = str;
+    changed(QObject::tr("Changed name"));
+}
 
+void CGisItemTrk::setColor(int idx)
+{
+    int N = sizeof(lineColors)/sizeof(QColor);
+    if(idx >= N)
+    {
+        return;
+    }
+    setColor(lineColors[idx]);
+    changed(QObject::tr("Changed color"));
+}
 
 void CGisItemTrk::setColor(const QColor& c)
 {
@@ -641,19 +1058,208 @@ void CGisItemTrk::setColor(const QColor& c)
     }
 
     setIcon(color.name());
-
 }
 
 
 
 void CGisItemTrk::setIcon(const QString& c)
 {
-    icon = QPixmap("://icons/48x48/Track.png");
+    trk.color   = c;
+    icon        = QPixmap("://icons/48x48/Track.png");
 
     QPixmap mask( icon.size() );
-    mask.fill( color );
+    mask.fill( str2color(c) );
     mask.setMask( icon.createMaskFromColor( Qt::transparent ) );
     icon = mask.scaled(22,22, Qt::KeepAspectRatio, Qt::SmoothTransformation);
 
     QTreeWidgetItem::setIcon(0,icon);
 }
+
+void CGisItemTrk::setMouseFocusByDistance(qreal dist, focusmode_e mode, IPlot *initiator)
+{
+    const trkpt_t * newPointOfFocus = 0;
+
+    if(dist != NOFLOAT)
+    {
+        qreal delta = totalDistance;
+
+        /// @todo: optimze search by single out segment and then do a binary search
+
+        foreach (const trkseg_t& seg, trk.segs)
+        {
+            foreach(const trkpt_t& pt, seg.pts)
+            {
+                if(pt.flags & trkpt_t::eDeleted)
+                {
+                    continue;
+                }
+
+                qreal d = qAbs(pt.distance - dist);
+                if(d <= delta)
+                {
+                    newPointOfFocus = &pt;
+                    delta = d;
+                }
+                else
+                {
+                    break;
+                }
+            }            
+        }
+    }
+
+    publishMouseFocus(newPointOfFocus, mode, initiator);
+
+}
+
+void CGisItemTrk::setMouseFocusByTime(quint32 time, focusmode_e mode, IPlot * initiator)
+{
+    const trkpt_t * newPointOfFocus = 0;
+
+    if(time != NOTIME)
+    {
+        /// @todo: optimze search by single out segment and then do a binary search
+
+        qreal delta = totalElapsedSeconds;
+
+        foreach (const trkseg_t& seg, trk.segs)
+        {
+            foreach(const trkpt_t& pt, seg.pts)
+            {
+                if(pt.flags & trkpt_t::eDeleted)
+                {
+                    continue;
+                }
+
+                qreal d = qAbs(qreal(pt.time.toTime_t()) - qreal(time));
+                if(d <= delta)
+                {
+                    newPointOfFocus = &pt;
+                    delta = d;
+                }
+                else
+                {
+                    break;
+                }
+            }
+        }
+    }
+
+    publishMouseFocus(newPointOfFocus, mode, initiator);
+
+}
+
+void CGisItemTrk::setMouseFocusByPoint(const QPoint& pt, focusmode_e mode)
+{
+    const trkpt_t * newPointOfFocus = 0;
+
+    if(hasUserFocus() && (pt != NOPOINT))
+    {
+        /*
+            Iterate over the polyline used to draw the track as it contains screen
+            coordinates. The polyline has all visible track points. But there are
+            invisible points, those marked as deleted, too. That is why the index
+            into the polyline cant't be used directly. In a second step we have
+            to iterate over all segments and visible points of the trk_t object
+            until the visible index is reached. This is done by getVisibleTrkPtByIndex().
+        */
+
+        quint32 i   = 0;
+        quint32 idx = 0;
+        qint32 d    = NOINT;
+        foreach(const QPointF& point, line)
+        {
+            int tmp = (pt - point).manhattanLength();
+            if(tmp < d)
+            {
+                idx = i;
+                d   = tmp;
+            }
+            i++;
+        }
+
+        if(d < MIN_DIST_FOCUS)
+        {
+            newPointOfFocus = getVisibleTrkPtByIndex(idx);
+        }
+    }
+    publishMouseFocus(newPointOfFocus, mode, 0);
+}
+
+
+void CGisItemTrk::setMouseFocusByIndex(quint32 idx, focusmode_e mode)
+{
+    const trkpt_t * newPointOfFocus = 0;
+
+    foreach (const trkseg_t& seg, trk.segs)
+    {
+        foreach(const trkpt_t& pt, seg.pts)
+        {
+            if(pt.idx == idx)
+            {
+                newPointOfFocus = &pt;
+                publishMouseFocus(newPointOfFocus, mode, 0);
+                return;
+            }
+        }
+    }
+}
+
+const CGisItemTrk::trkpt_t * CGisItemTrk::getVisibleTrkPtByIndex(quint32 idx)
+{
+    quint32 i = 0;
+    foreach (const trkseg_t& seg, trk.segs)
+    {
+        foreach(const trkpt_t& pt, seg.pts)
+        {
+            if(pt.flags & trkpt_t::eDeleted)
+            {
+                continue;
+            }
+            if(i == idx)
+            {
+                return &pt;
+            }
+            i++;
+        }
+    }
+    return 0;
+}
+
+
+
+void CGisItemTrk::publishMouseFocus(const trkpt_t * pt, focusmode_e mode,  IPlot * initiator)
+{
+    switch(mode)
+    {
+        case eFocusMouseMove:
+            if(pt != mouseMoveFocus)
+            {
+                mouseMoveFocus = pt;
+                foreach(IPlot * plot, registeredPlots)
+                {
+                    if(plot != initiator)
+                    {
+                        plot->setMouseMoveFocus(mouseMoveFocus);
+                    }
+                }
+
+                if(!dlgDetails.isNull())
+                {
+                    dlgDetails->setMouseMoveFocus(mouseMoveFocus);
+                }
+            }
+            break;
+        case eFocusMouseClick:
+            if(pt != mouseClickFocus)
+            {
+                mouseClickFocus = pt;
+                if(!dlgDetails.isNull())
+                {
+                    dlgDetails->setMouseClickFocus(mouseClickFocus);
+                }
+            }
+
+        default:;
+    }
+}
diff --git a/src/gis/trk/CGisItemTrk.h b/src/gis/trk/CGisItemTrk.h
index a582603..eada1ce 100644
--- a/src/gis/trk/CGisItemTrk.h
+++ b/src/gis/trk/CGisItemTrk.h
@@ -20,42 +20,155 @@
 #define CGISITEMTRK_H
 
 #include "gis/IGisItem.h"
+#include "gis/IGisLine.h"
 
 #include <QPen>
+#include <QPointer>
 
 class QDomNode;
 class CGisProject;
+class IPlot;
+class CDetailsTrk;
+class CScrOptTrk;
 
-class CGisItemTrk : public IGisItem
+#define TRK_N_COLORS 17
+
+class CGisItemTrk : public IGisItem, public IGisLine
 {
     public:
-        CGisItemTrk(const QDomNode &xml, CGisProject *parent);
+        struct trk_t;
+        struct trkpt_t;
+
+        enum focusmode_e
+        {
+             eFocusMouseMove
+            ,eFocusMouseClick
+        };
+
+        CGisItemTrk(quint32 idx1, quint32 idx2, const trk_t &srctrk, CGisProject * project);
+        CGisItemTrk(const CGisItemTrk& parentTrk, CGisProject * project, int idx);
+        CGisItemTrk(const QPolygonF& line, const QString &name, CGisProject * project, int idx);
+        CGisItemTrk(const QDomNode &xml, CGisProject *project);
         virtual ~CGisItemTrk();
 
         const QString& getName(){return trk.name;}
+        int getColorIdx(){return colorIdx;}
         QString getInfo();
+        QString getInfoTrkPt(const trkpt_t& pt);
+        QString getInfoProgress(const trkpt_t& pt);
+        quint32 getTotalElapsedSeconds(){return totalElapsedSeconds;}
+
+        void setName(const QString& str);
+        void setColor(int idx);
+
         IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
         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 QRectF& viewport, CGisDraw * gis);
         void drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis);
         void drawHighlight(QPainter& p);
         void save(QDomNode& gpx);
-        bool isCloseTo(const QPointF& pos);
-        void gainUserFocus();
 
-    private:
-        struct trk_t;
-        static const QColor  lineColors[];
-        static const QString bulletColors[];
+        void setData(const QPolygonF& line);
+        void getData(QPolygonF& line);
+
+        /**
+           @brief Switch user focus on and off.
+
+           If the focus is switched on any other track having the focus will loose it.
+
+           @param yes   set true to gain focus.
+        */
+        void gainUserFocus(bool yes);
+
+        /**
+           @brief Make sure a CDetailsTrk widget is registered with the main tab widget
+        */
+        void edit();
+
+        /**
+           @brief Cut track at mouseClickFocus
+           @return Return true on success.
+         */
+        bool cut();
+        /**
+           @brief Check for user focus
+
+           @return True if the track has user focus
+         */
+        bool hasUserFocus(){return key == keyUserFocus;}
+
+        /**
+           @brief Get the key of the current track with user focus
+
+           @return If no track has the focus an empty string is returned
+         */
+        static const QString& getKeyUserFocus(){return keyUserFocus;}
+
+        /**
+           @brief Each plot widget that operates on the track must register during it's contruction
+
+           see registeredPlots for a detailed discussion
+
+           @param plot
+        */
+        void registerPlot(IPlot * plot);
+
+        /**
+           @brief Each plot widget that operates on the track must unregister during it's destruction
+
+           see registeredPlots for a detailed discussion
+
+           @param plot
+        */
+        void unregisterPlot(IPlot * plot);
+
+        /**
+           @brief Use point with the distance from start matching best the given distance.
+
+           @param dist      the distance in [m]
+           @param initiator a pointer to an initiating IPlot object, or 0
+         */
+        void setMouseFocusByDistance(qreal dist, focusmode_e mode, IPlot * initiator);
+
+        /**
+           @brief Use point with time from start matching best the given time delta
+
+           @param time      a time delta in [s] relative to the start time
+           @param initiator a pointer to an initiating IPlot object, or 0
+        */
+        void setMouseFocusByTime(quint32 time, focusmode_e mode, IPlot * initiator);
+
+        /**
+           @brief Use the point that is closest to the given point on the screen.
+
+           @param pt        a point on the screen in pixel.
+         */
+        void setMouseFocusByPoint(const QPoint& pt, focusmode_e mode);
+
+        /**
+           @brief Use point with given index counter
+           @param idx
+        */
+        void setMouseFocusByIndex(quint32 idx, focusmode_e mode);
+
+        static const QColor  lineColors[TRK_N_COLORS];
+        static const QString bulletColors[TRK_N_COLORS];
+
+    private:        
 
         void genKey();
         void readTrk(const QDomNode& xml, trk_t& trk);
         void setColor(const QColor& c);
         void setIcon(const QString& c);
         void deriveSecondaryData();
+        const trkpt_t *getVisibleTrkPtByIndex(quint32 idx);
+        void publishMouseFocus(const trkpt_t * pt, focusmode_e mode, IPlot *initiator);
+        void readLine(const QPolygonF &line);
 
-        static QString keyUserFocus;
-
+    public:
         struct trkpt_t : public wpt_t
         {
             trkpt_t()
@@ -70,7 +183,8 @@ class CGisItemTrk : public IGisItem
                 descend         = NOFLOAT;
                 elapsedSeconds  = NOFLOAT;
                 elapsedSecondsMoving = NOFLOAT;
-                slope           = NOFLOAT;
+                slope1          = NOFLOAT;
+                slope2          = NOFLOAT;
                 speed           = NOFLOAT;
             }
 
@@ -84,6 +198,7 @@ class CGisItemTrk : public IGisItem
             };
 
             quint32 flags;
+            quint32 idx;
 
             /// the distance to the last point
             qreal deltaDistance;
@@ -93,14 +208,15 @@ class CGisItemTrk : public IGisItem
             qreal ascend;
             /// the descend from the start of the track
             qreal descend;
-
-            qreal slope;
-
+            /// the slope [°] over several points close by
+            qreal slope1;
+            /// the slope [%] over several points close by
+            qreal slope2;
+            /// the speed over several points close by
             qreal speed;
-
             /// the seconds since the start of the track
             qreal elapsedSeconds;
-
+            /// the seconds since the start of the track with moving speed
             qreal elapsedSecondsMoving;
         };
 
@@ -124,13 +240,20 @@ class CGisItemTrk : public IGisItem
             QVector<trkseg_t> segs;
             // -- all gpx tags - stop
             QMap<QString, QVariant> extensions;
+
+            QString color;
         };
 
-        static const QPen penBackground;
-        QPen penForeground;
+        const trk_t& getTrackData() const{return trk;}
 
+    private:
         trk_t trk;
 
+        static QString keyUserFocus;
+        static const QPen penBackground;
+
+        QPen penForeground;
+
         quint32     cntTotalPoints;
         quint32     cntVisiblePoints;
         QDateTime   timeStart;
@@ -147,10 +270,35 @@ class CGisItemTrk : public IGisItem
         QPixmap bullet;
         /// the track line color by index
         unsigned colorIdx;
-        ///
+        /// the current track line as screen pixel coordinates
         QPolygonF line;
 
+        /**
+            A list of plot objects that need to get informed on any change in data.
+
+            @note This is necessary because QTreeWidgetItem is not derived from QObject.
+                  Thus no signals and slots can be handled. Probably this is because the
+                  signal/slot system would be a huge overhead on treewidgets with a large
+                  amount of items.
+
+                  Anyway we need some kind of signaling between the track object and the
+                  plot objects displaying the data. And we have to keep in mind that
+                  the track can be delete by the user at any time. That is why no other
+                  object is allowed to save a pointer to the track. It must store the
+                  key. But accessing the track via key is expensive.
+
+                  That is why we make an exception here. As the track will delete all
+                  registered plot objects upon destruction, it should be ok to store
+                  the track object in the plot object, too. By that plot and track can
+                  easily communicate with each other.
+        */
+        QSet<IPlot*> registeredPlots;
+
+        const trkpt_t * mouseMoveFocus;
+        const trkpt_t * mouseClickFocus;
 
+        QPointer<CDetailsTrk> dlgDetails;
+        QPointer<CScrOptTrk>  scrOpt;
 };
 
 #endif //CGISITEMTRK_H
diff --git a/src/gis/trk/CScrOptTrk.cpp b/src/gis/trk/CScrOptTrk.cpp
index 98666a7..231a1db 100644
--- a/src/gis/trk/CScrOptTrk.cpp
+++ b/src/gis/trk/CScrOptTrk.cpp
@@ -23,22 +23,28 @@
 #include "canvas/CCanvas.h"
 #include "CMainWindow.h"
 
-CScrOptTrk::CScrOptTrk(CGisItemTrk * trk, const QPoint& origin, IMouse *parent)
+CScrOptTrk::CScrOptTrk(CGisItemTrk * trk, const QPoint& point, IMouse *parent)
     : IScrOpt(parent->getCanvas())
     , key(trk->getKey())
 {
-    setupUi(this);
-    setOrigin(origin);
+    setupUi(this);    
+    setOrigin(point);
     label->setFont(CMainWindow::self().getMapFont());
     label->setText(trk->getInfo());
+    adjustSize();
 
+    toolProfile->setChecked(trk->hasUserFocus());
+    toolEdit->setEnabled(!trk->isReadOnly());
 
-    anchor = trk->getPointCloseBy(origin);
-    move(anchor.toPoint() + QPoint(30,30));
-    adjustSize();
-    show();
+    anchor = trk->getPointCloseBy(point);
+    move(anchor.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
+    show();        
 
+    connect(toolEditDetails, SIGNAL(clicked()), this, SLOT(slotEditDetails()));
     connect(toolDelete, SIGNAL(clicked()), this, SLOT(slotDelete()));
+    connect(toolProfile, SIGNAL(toggled(bool)), this, SLOT(slotProfile(bool)));
+    connect(toolCut, SIGNAL(clicked()), this, SLOT(slotCut()));
+    connect(toolEdit, SIGNAL(clicked()), this, SLOT(slotEdit()));
 }
 
 CScrOptTrk::~CScrOptTrk()
@@ -49,8 +55,32 @@ CScrOptTrk::~CScrOptTrk()
 void CScrOptTrk::slotDelete()
 {
     CGisWidget::self().delItemByKey(key);
+    deleteLater();
+}
+
+void CScrOptTrk::slotEditDetails()
+{
+    CGisWidget::self().editItemByKey(key);
+    deleteLater();
+}
+
+void CScrOptTrk::slotProfile(bool on)
+{
+    CGisWidget::self().focusTrkByKey(on, key);
+    deleteLater();
+}
+
+void CScrOptTrk::slotCut()
+{
+    CGisWidget::self().cutTrkByKey(key);
+    deleteLater();
 }
 
+void CScrOptTrk::slotEdit()
+{
+    CGisWidget::self().editTrkByKey(key);
+    deleteLater();
+}
 
 void CScrOptTrk::draw(QPainter& p)
 {
@@ -62,21 +92,5 @@ void CScrOptTrk::draw(QPainter& p)
     }
     item->drawHighlight(p);
 
-
-    QRectF r = rect();
-    r.moveTopLeft(QPoint(x(), y()));
-    QPainterPath path1;
-    path1.addRoundedRect(r,5,5);
-
-    QPolygonF poly2;
-    poly2 << anchor << (r.topLeft() + QPointF(10,0)) << (r.topLeft() + QPointF(0,10)) << anchor;
-    QPainterPath path2;
-    path2.addPolygon(poly2);
-
-    path1 = path1.united(path2);
-
-    p.setPen(CCanvas::penBorderGray);
-    p.setBrush(CCanvas::brushBackWhite);
-    p.drawPolygon(path1.toFillPolygon());
-
+    drawBubble2(anchor, p);
 }
diff --git a/src/gis/trk/CScrOptTrk.h b/src/gis/trk/CScrOptTrk.h
index 7a8d631..1ea7586 100644
--- a/src/gis/trk/CScrOptTrk.h
+++ b/src/gis/trk/CScrOptTrk.h
@@ -20,8 +20,6 @@
 #define CSCROPTTRK_H
 
 #include "mouse/IScrOpt.h"
-
-#include <QWidget>
 #include "ui_IScrOptTrk.h"
 
 class CGisItemTrk;
@@ -31,13 +29,18 @@ class CScrOptTrk : public IScrOpt, private Ui::IScrOptTrk
 {
     Q_OBJECT
     public:
-        CScrOptTrk(CGisItemTrk * trk, const QPoint &origin, IMouse *parent);
+        CScrOptTrk(CGisItemTrk * trk, const QPoint &point, IMouse *parent);
         virtual ~CScrOptTrk();
 
         void draw(QPainter& p);
 
-    private slots:
+    private slots:        
         void slotDelete();
+        void slotEditDetails();
+        void slotProfile(bool on);
+        void slotCut();
+        void slotEdit();
+
 
     private:
         QString key;
diff --git a/src/gis/trk/IDetailsTrk.ui b/src/gis/trk/IDetailsTrk.ui
new file mode 100644
index 0000000..b90bcae
--- /dev/null
+++ b/src/gis/trk/IDetailsTrk.ui
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IDetailsTrk</class>
+ <widget class="QWidget" name="IDetailsTrk">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>803</width>
+    <height>592</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_3">
+     <item>
+      <widget class="QLabel" name="labelInfoTrkPt">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>-
+-</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="Line" name="line">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="labelInfoProgress">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>-
+-</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Expanding</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="CPlotProfile" name="plotElevation" native="true">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="CPlotSpeed" name="plotSpeed" native="true">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="CPlotDistance" name="plotDistance" native="true">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_4">
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="QComboBox" name="comboColor"/>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="lineName"/>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="checkProfile">
+           <property name="text">
+            <string>Profile</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="checkSpeed">
+           <property name="text">
+            <string>Speed</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="checkProgress">
+           <property name="text">
+            <string>Progress</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="labelTainted">
+           <property name="text">
+            <string/>
+           </property>
+           <property name="pixmap">
+            <pixmap resource="../../resources.qrc">:/icons/32x32/Tainted.png</pixmap>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="toolLock">
+           <property name="text">
+            <string>...</string>
+           </property>
+           <property name="icon">
+            <iconset resource="../../resources.qrc">
+             <normaloff>:/icons/32x32/UnLock.png</normaloff>
+             <normalon>:/icons/32x32/Lock.png</normalon>:/icons/32x32/UnLock.png</iconset>
+           </property>
+           <property name="iconSize">
+            <size>
+             <width>22</width>
+             <height>22</height>
+            </size>
+           </property>
+           <property name="checkable">
+            <bool>true</bool>
+           </property>
+           <property name="autoRaise">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QTreeWidget" name="treeWidget">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="alternatingRowColors">
+          <bool>true</bool>
+         </property>
+         <property name="rootIsDecorated">
+          <bool>false</bool>
+         </property>
+         <property name="itemsExpandable">
+          <bool>false</bool>
+         </property>
+         <attribute name="headerCascadingSectionResizes">
+          <bool>false</bool>
+         </attribute>
+         <attribute name="headerDefaultSectionSize">
+          <number>50</number>
+         </attribute>
+         <column>
+          <property name="text">
+           <string notr="true">#</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Time</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Ele.</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Delta</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Dist.</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Speed</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Slope</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Ascend</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Descend</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Position</string>
+          </property>
+         </column>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QTabWidget" name="tabWidget">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Maximum" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="currentIndex">
+        <number>0</number>
+       </property>
+       <widget class="QWidget" name="tab_3">
+        <attribute name="title">
+         <string>Info</string>
+        </attribute>
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <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="CPlotTrack" name="plotTrack" native="true"/>
+         </item>
+         <item>
+          <widget class="QLabel" name="labelInfo">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text">
+            <string>-</string>
+           </property>
+           <property name="alignment">
+            <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+       <widget class="QWidget" name="tab_4">
+        <attribute name="title">
+         <string>Hist.</string>
+        </attribute>
+        <layout class="QVBoxLayout" name="verticalLayout_3">
+         <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="QTextBrowser" name="textHistory"/>
+         </item>
+        </layout>
+       </widget>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>CPlotProfile</class>
+   <extends>QWidget</extends>
+   <header>plot/CPlotProfile.h</header>
+   <container>1</container>
+  </customwidget>
+  <customwidget>
+   <class>CPlotDistance</class>
+   <extends>QWidget</extends>
+   <header>plot/CPlotDistance.h</header>
+   <container>1</container>
+  </customwidget>
+  <customwidget>
+   <class>CPlotSpeed</class>
+   <extends>QWidget</extends>
+   <header>plot/CPlotSpeed.h</header>
+   <container>1</container>
+  </customwidget>
+  <customwidget>
+   <class>CPlotTrack</class>
+   <extends>QWidget</extends>
+   <header>plot/CPlotTrack.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <resources>
+  <include location="../../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gis/trk/IScrOptTrk.ui b/src/gis/trk/IScrOptTrk.ui
index 8d6ca91..c7722b7 100644
--- a/src/gis/trk/IScrOptTrk.ui
+++ b/src/gis/trk/IScrOptTrk.ui
@@ -36,11 +36,8 @@
      </property>
      <item>
       <widget class="QToolButton" name="toolEditDetails">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
        <property name="toolTip">
-        <string><html><head/><body><p>View details &amp; Edit</p></body></html></string>
+        <string>View details &amp; Edit properties of track.</string>
        </property>
        <property name="text">
         <string>...</string>
@@ -54,7 +51,7 @@
      <item>
       <widget class="QToolButton" name="toolDelete">
        <property name="toolTip">
-        <string><html><head/><body><p>Delete</p></body></html></string>
+        <string>Delete</string>
        </property>
        <property name="text">
         <string>...</string>
@@ -66,6 +63,58 @@
       </widget>
      </item>
      <item>
+      <widget class="Line" name="line">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolProfile">
+       <property name="toolTip">
+        <string>Show on-screen profile and detailed information about points.</string>
+       </property>
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../resources.qrc">
+         <normaloff>:/icons/32x32/TrkProfile.png</normaloff>:/icons/32x32/TrkProfile.png</iconset>
+       </property>
+       <property name="checkable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolCut">
+       <property name="toolTip">
+        <string>Cut track at selected point into two tracks.</string>
+       </property>
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../resources.qrc">
+         <normaloff>:/icons/32x32/TrkCut.png</normaloff>:/icons/32x32/TrkCut.png</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolEdit">
+       <property name="toolTip">
+        <string>Edit position of track points.</string>
+       </property>
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../../resources.qrc">
+         <normaloff>:/icons/32x32/LineMove.png</normaloff>:/icons/32x32/LineMove.png</iconset>
+       </property>
+      </widget>
+     </item>
+     <item>
       <spacer name="horizontalSpacer">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
diff --git a/src/gis/wpt/CDetailsWpt.cpp b/src/gis/wpt/CDetailsWpt.cpp
index 57d14c2..cc3a022 100644
--- a/src/gis/wpt/CDetailsWpt.cpp
+++ b/src/gis/wpt/CDetailsWpt.cpp
@@ -39,9 +39,8 @@ CDetailsWpt::CDetailsWpt(CGisItemWpt &wpt, QWidget *parent)
     connect(labelPositon, SIGNAL(linkActivated(QString)), this, SLOT(slotLinkActivated(QString)));
     connect(labelElevation, SIGNAL(linkActivated(QString)), this, SLOT(slotLinkActivated(QString)));
     connect(labelProximity, SIGNAL(linkActivated(QString)), this, SLOT(slotLinkActivated(QString)));
+    connect(textCmtDesc, SIGNAL(anchorClicked(QUrl)), this, SLOT(slotLinkActivated(QUrl)));
     connect(toolIcon, SIGNAL(clicked()), this, SLOT(slotChangeIcon()));
-    connect(toolEditCmt, SIGNAL(clicked()), this, SLOT(slotChangeCmt()));
-    connect(toolEditDesc, SIGNAL(clicked()), this, SLOT(slotChangeDesc()));
     connect(toolLock, SIGNAL(toggled(bool)), this, SLOT(slotChangeReadOnlyMode(bool)));
 }
 
@@ -50,7 +49,7 @@ CDetailsWpt::~CDetailsWpt()
 
 }
 
-QString toLink(bool isReadOnly, const QString& href, const QString& str)
+QString CDetailsWpt::toLink(bool isReadOnly, const QString& href, const QString& str)
 {
     if(isReadOnly)
     {
@@ -107,30 +106,40 @@ void CDetailsWpt::setupGui()
 
     if(wpt.getTime().isValid())
     {
-        labelTime->setText(IUnit::datetime2string(wpt.getTime(), QPointF(pos.x()*DEG_TO_RAD, pos.y()*DEG_TO_RAD)));
+        labelTime->setText(IUnit::datetime2string(wpt.getTime(), false, QPointF(pos.x()*DEG_TO_RAD, pos.y()*DEG_TO_RAD)));
     }
 
+    textCmtDesc->document()->clear();
+
+    foreach(const IGisItem::link_t& link, wpt.getLinks())
+    {
+        QString str = QString("<p><a href='%1'>%2</a></p>").arg(link.uri.toString()).arg(link.text);
+        textCmtDesc->append(str);
+    }
+
+    textCmtDesc->append(toLink(isReadOnly, "comment", tr("<h4>Comment:</h4>")));
     if(IGisItem::removeHtml(wpt.getComment()).simplified().isEmpty())
     {
-        textCmt->setText(tr("no comment"));
-        textCmt->hide();
+        textCmtDesc->append(tr("<p>--- no comment ---</p>"));
     }
     else
     {
-        textCmt->setText(wpt.getComment());
-        textCmt->show();
+        textCmtDesc->append(wpt.getComment());
     }
 
+    textCmtDesc->append(toLink(isReadOnly, "description", tr("<h4>Description:</h4>")));
     if(IGisItem::removeHtml(wpt.getDescription()).simplified().isEmpty())
     {
-        textDesc->setText(tr("no description"));
-        textDesc->hide();
+        textCmtDesc->append(tr("<p>--- no description ---</p>"));
     }
     else
     {
-        textDesc->setText(wpt.getDescription());
-        textDesc->show();
+        textCmtDesc->append(wpt.getDescription());
     }
+    textCmtDesc->moveCursor (QTextCursor::Start) ;
+    textCmtDesc->ensureCursorVisible() ;
+
+
 
     if(!wpt.getHistory().isEmpty())
     {
@@ -146,16 +155,6 @@ void CDetailsWpt::setupGui()
         textHistory->hide();
     }
 
-    if(isReadOnly)
-    {
-        toolEditCmt->hide();
-        toolEditDesc->hide();
-    }
-    else
-    {
-        toolEditCmt->show();
-        toolEditDesc->show();
-    }
 
     toolLock->setChecked(isReadOnly);
 }
@@ -202,44 +201,52 @@ void CDetailsWpt::slotLinkActivated(const QString& link)
     setupGui();
 }
 
-void CDetailsWpt::slotChangeIcon()
+void CDetailsWpt::slotLinkActivated(const QUrl& url)
 {
+    if(url.toString() == "comment")
+    {
+        CTextEditWidget dlg(0);
+        dlg.setHtml(wpt.getComment());
+        if(dlg.exec() == QDialog::Accepted)
+        {
+            wpt.setComment(dlg.getHtml());
+            setupGui();
+        }
 
-    if(wpt.isReadOnly())
+    }
+    else if(url.toString() == "description")
     {
-        return;
+        CTextEditWidget dlg(0);
+        dlg.setHtml(wpt.getDescription());
+        if(dlg.exec() == QDialog::Accepted)
+        {
+            wpt.setDescription(dlg.getHtml());
+            setupGui();
+        }
     }
-
-    CWptIconDialog dlg(toolIcon);
-    if(dlg.exec() == QDialog::Accepted)
+    else
     {
-        wpt.setIcon(toolIcon->objectName());
-        setupGui();
+        QDesktopServices::openUrl(url);
     }
 }
 
-void CDetailsWpt::slotChangeCmt()
+void CDetailsWpt::slotChangeIcon()
 {
-    CTextEditWidget dlg(0);
-    dlg.setHtml(wpt.getComment());
-    if(dlg.exec() == QDialog::Accepted)
+
+    if(wpt.isReadOnly())
     {
-        wpt.setComment(dlg.getHtml());
-        setupGui();
+        return;
     }
-}
 
-void CDetailsWpt::slotChangeDesc()
-{
-    CTextEditWidget dlg(0);
-    dlg.setHtml(wpt.getDescription());
+    CWptIconDialog dlg(toolIcon);
     if(dlg.exec() == QDialog::Accepted)
     {
-        wpt.setDescription(dlg.getHtml());
+        wpt.setIcon(toolIcon->objectName());
         setupGui();
     }
 }
 
+
 void CDetailsWpt::slotChangeReadOnlyMode(bool on)
 {
     wpt.setReadOnlyMode(on);
diff --git a/src/gis/wpt/CDetailsWpt.h b/src/gis/wpt/CDetailsWpt.h
index b160919..d895041 100644
--- a/src/gis/wpt/CDetailsWpt.h
+++ b/src/gis/wpt/CDetailsWpt.h
@@ -33,13 +33,13 @@ class CDetailsWpt : public QDialog, private Ui::IDetailsWpt
 
     private slots:
         void slotLinkActivated(const QString& link);
+        void slotLinkActivated(const QUrl& url);
         void slotChangeIcon();
-        void slotChangeCmt();
-        void slotChangeDesc();
         void slotChangeReadOnlyMode(bool on);
 
     private:
         void setupGui();
+        QString toLink(bool isReadOnly, const QString& href, const QString& str);
         CGisItemWpt& wpt;
 };
 
diff --git a/src/gis/wpt/CGisItemWpt.cpp b/src/gis/wpt/CGisItemWpt.cpp
index 3a6877d..673df62 100644
--- a/src/gis/wpt/CGisItemWpt.cpp
+++ b/src/gis/wpt/CGisItemWpt.cpp
@@ -27,16 +27,49 @@
 #include "canvas/CCanvas.h"
 #include "mouse/IMouse.h"
 #include "units/IUnit.h"
+#include "helpers/CWptIconDialog.h"
+#include "helpers/CPositionDialog.h"
 #include "GeoMath.h"
+#include "CMainWindow.h"
 
 
 #include <QtWidgets>
 #include <QtXml>
 
 QString CGisItemWpt::keyUserFocus;
+QString CGisItemWpt::lastName;
+QString CGisItemWpt::lastIcon;
 
+/// used to add a new waypoint
+CGisItemWpt::CGisItemWpt(const QPointF& pos, const QString& name, const QString &icon, CGisProject * project)
+    : IGisItem(project, eTypeWpt, -1)
+    , proximity(NOFLOAT)
+    , posScreen(NOPOINTF)
+{
+
+    wpt.name    = name;
+    wpt.sym     = icon;
+    wpt.lon     = pos.x();
+    wpt.lat     = pos.y();
+    wpt.time    = QDateTime::currentDateTimeUtc();
+
+    flags = eFlagCreatedInQms|eFlagWriteAllowed;
+    qreal ele = CMainWindow::self().getEelevationAt(pos * DEG_TO_RAD);
+    wpt.ele = (ele == NOFLOAT) ? NOINT : qRound(ele);
+
+    boundingRect = QRectF(QPointF(wpt.lon,wpt.lat)*DEG_TO_RAD,QPointF(wpt.lon,wpt.lat)*DEG_TO_RAD);
+    setText(1, "*");
+    setText(0, wpt.name);
+    setIcon();
+    setToolTip(0, getInfo());
+    genKey();
+
+    project->setText(1,"*");
+}
+
+/// used to move a copy of waypoint
 CGisItemWpt::CGisItemWpt(const QPointF& pos, const CGisItemWpt& parentWpt, CGisProject * project)
-    : IGisItem(project)
+    : IGisItem(project, eTypeWpt, -1)
     , proximity(NOFLOAT)
     , posScreen(NOPOINTF)
 {
@@ -48,16 +81,40 @@ CGisItemWpt::CGisItemWpt(const QPointF& pos, const CGisItemWpt& parentWpt, CGisP
     key.clear();
     flags = eFlagCreatedInQms|eFlagWriteAllowed;
 
+    qreal ele = CMainWindow::self().getEelevationAt(pos * DEG_TO_RAD);
+    wpt.ele = (ele == NOFLOAT) ? NOINT : qRound(ele);
+
     boundingRect = QRectF(QPointF(wpt.lon,wpt.lat)*DEG_TO_RAD,QPointF(wpt.lon,wpt.lat)*DEG_TO_RAD);
     setText(1, "*");
     setText(0, wpt.name);
     setIcon();
     setToolTip(0, getInfo());
     genKey();
+
+    project->setText(1,"*");
+}
+
+/// used to create a copy of waypoint with new parent
+CGisItemWpt::CGisItemWpt(const CGisItemWpt &parentWpt, CGisProject *project, int idx)
+    : IGisItem(project, eTypeWpt, idx)
+    , proximity(NOFLOAT)
+    , posScreen(NOPOINTF)
+{
+    *this = parentWpt;
+    setText(1, "*");
+    setText(0, wpt.name);
+    setIcon();
+    setToolTip(0, getInfo());
+
+    key.clear();
+    genKey();
+
+    project->setText(1,"*");
 }
 
+/// used to create waypoint from GPX file
 CGisItemWpt::CGisItemWpt(const QDomNode &xml, CGisProject *project)
-    : IGisItem(project)
+    : IGisItem(project, eTypeWpt, project->childCount())
     , proximity(NOFLOAT)
     , posScreen(NOPOINTF)
 {
@@ -100,33 +157,65 @@ CGisItemWpt::~CGisItemWpt()
 
 }
 
-CGisItemWpt& CGisItemWpt::operator=(const CGisItemWpt& w)
+void CGisItemWpt::genKey()
 {
-    wpt             = w.wpt;
-    proximity       = w.proximity;
-    geocache        = w.geocache;
-    focus           = w.focus;
-    posScreen       = w.posScreen;
+    if(key.isEmpty())
+    {
+        QCryptographicHash md5(QCryptographicHash::Md5);
+        md5.addData((const char*)&wpt, sizeof(wpt));
+        key = md5.result().toHex();
+    }
+}
+
+const QString& CGisItemWpt::getNewName()
+{
+    const int s = lastName.size();
+    if(s != 0)
+    {
+        int idx;
+        for(idx = s; idx > 0; idx--)
+        {
+            if(!lastName[idx - 1].isDigit())
+            {
+                break;
+            }
+        }
+
+        if(idx == 0)
+        {
+            lastName = QString::number(lastName.toInt() + 1);
+        }
+        else
+        {
+            lastName = lastName.left(idx) + QString::number(lastName.mid(idx).toInt() + 1);
+        }
 
+    }
+    lastName = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new waypoint name."), QLineEdit::Normal, lastName);
+    return lastName;
+}
 
-    flags           = w.flags;
-    key             = w.key;
-    icon            = w.icon;
-    boundingRect    = w.boundingRect;
+const QString& CGisItemWpt::getNewIcon()
+{
+    QToolButton but;
+    but.setObjectName(lastIcon);
+    CWptIconDialog dlg(&but);
+    dlg.exec();
+    lastIcon = but.objectName();
 
-    return *this;
+    return lastIcon;
 }
 
-void CGisItemWpt::genKey()
+void CGisItemWpt::getNewPosition(QPointF& pos)
 {
-    if(key.isEmpty())
+    CPositionDialog dlg(0, pos);
+    if(dlg.exec() == QDialog::Rejected)
     {
-        QCryptographicHash md5(QCryptographicHash::Md5);
-        md5.addData((const char*)&wpt, sizeof(wpt));
-        key = md5.result().toHex();
+        pos = NOPOINTF;
     }
 }
 
+
 QString CGisItemWpt::getInfo()
 {
     QString str = "<div>" + getName() + "</div>";
@@ -140,7 +229,7 @@ QString CGisItemWpt::getInfo()
     {
         if(!str.isEmpty()) str += "<br/>\n";
 
-        str += IUnit::datetime2string(wpt.time, QPointF(wpt.lon*DEG_TO_RAD, wpt.lat*DEG_TO_RAD));
+        str += IUnit::datetime2string(wpt.time, false, QPointF(wpt.lon*DEG_TO_RAD, wpt.lat*DEG_TO_RAD));
     }
 
     if(wpt.ele != NOINT)
@@ -159,7 +248,7 @@ QString CGisItemWpt::getInfo()
         str += QObject::tr("Proximity: %1 %2").arg(val).arg(unit);
     }
 
-    QString desc = removeHtml(wpt.desc);
+    QString desc = removeHtml(wpt.desc).simplified();
     if(desc.count())
     {
         if(!str.isEmpty()) str += "<br/>\n";
@@ -175,7 +264,7 @@ QString CGisItemWpt::getInfo()
     }
     else
     {
-        QString cmt = removeHtml(wpt.cmt);
+        QString cmt = removeHtml(wpt.cmt).simplified();
         if(cmt.count())
         {
             if(!str.isEmpty()) str += "<br/>\n";
@@ -195,7 +284,11 @@ QString CGisItemWpt::getInfo()
 
 IScrOpt * CGisItemWpt::getScreenOptions(const QPoint& origin, IMouse * mouse)
 {
-    return new CScrOptWpt(this, origin, mouse);
+    if(scrOpt.isNull())
+    {
+        scrOpt = new CScrOptWpt(this, origin, mouse);
+    }
+    return scrOpt;
 }
 
 void CGisItemWpt::setIcon()
@@ -213,8 +306,9 @@ void CGisItemWpt::setIcon()
 }
 
 void CGisItemWpt::setName(const QString& str)
-{
+{    
     setText(0, str);
+    lastName = str;
     wpt.name = str;
     changed(QObject::tr("Changed name"));
 }
@@ -240,7 +334,8 @@ void CGisItemWpt::setProximity(qreal val)
 
 void CGisItemWpt::setIcon(const QString& name)
 {    
-    wpt.sym = name;
+    lastIcon = name;
+    wpt.sym  = name;
     setIcon();
     changed(QObject::tr("Changed icon"));
 }
@@ -419,9 +514,9 @@ bool CGisItemWpt::isCloseTo(const QPointF& pos)
     return ((pos - posScreen).manhattanLength() < 22);
 }
 
-void CGisItemWpt::gainUserFocus()
+void CGisItemWpt::gainUserFocus(bool yes)
 {
-    keyUserFocus = key;
+    keyUserFocus = yes ? key : "";
 }
 
 void CGisItemWpt::edit()
@@ -455,7 +550,7 @@ void CGisItemWpt::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF> &b
         pt1 = GPS_Math_Wpt_Projection(pt1, proximity, 90 * DEG_TO_RAD);
         gis->convertRad2Px(pt1);
 
-        double r = pt1.x() - posScreen.x();
+        qreal r = pt1.x() - posScreen.x();
 
         p.save();
         p.setBrush(Qt::NoBrush);
diff --git a/src/gis/wpt/CGisItemWpt.h b/src/gis/wpt/CGisItemWpt.h
index 2b08069..7dad51a 100644
--- a/src/gis/wpt/CGisItemWpt.h
+++ b/src/gis/wpt/CGisItemWpt.h
@@ -21,8 +21,11 @@
 
 #include "gis/IGisItem.h"
 
+#include <QPointer>
+
 class CGisProject;
 class QDomNode;
+class CScrOptWpt;
 
 class CGisItemWpt : public IGisItem
 {
@@ -68,12 +71,36 @@ class CGisItemWpt : public IGisItem
             QList<geocachelog_t> logs;
         };
 
+        /**
+           @brief Create a completely new waypoint
+           @param pos       the waypoint's position [°]
+           @param name      the waypoint's name
+           @param icon      the waypoint's icon
+           @param project   the project the waypoint is added to
+         */
+        CGisItemWpt(const QPointF& pos, const QString& name, const QString& icon, CGisProject * project);
+        /**
+           @brief Create a copy of an existing waypoint with a new position
+           @param pos       the waypoint's new position [°]
+           @param parentWpt the waypoint to copy
+           @param project   the project the waypoint is added to
+         */
         CGisItemWpt(const QPointF& pos, const CGisItemWpt &parentWpt, CGisProject *project);
+        /**
+           @brief Create a 1:1 copy of an existing waypoint (with new key)
+           @param parentWpt the waypoint to copy
+           @param project   the project the waypoint is added to
+           @param idx       the index to insert the item. If -1 the item will be appended to it's group
+         */
+        CGisItemWpt(const CGisItemWpt &parentWpt, CGisProject *project, int idx);
+        /**
+           @brief Create item from GPX.
+           @param xml       the GPX section containing the item
+           @param project   the project to append with item
+         */
         CGisItemWpt(const QDomNode& xml, CGisProject * project);
         virtual ~CGisItemWpt();
 
-        CGisItemWpt& operator=(const CGisItemWpt& w);
-
         void setName(const QString& str);
         void setPosition(const QPointF& pos);
         void setElevation(qint32 val);
@@ -92,7 +119,7 @@ class CGisItemWpt : public IGisItem
         const QString& getComment(){return wpt.cmt;}
         const QString& getDescription(){return wpt.desc;}
         const geocache_t& getGeoCache(){return geocache;}
-        const history_t& getHistory(){return history;}
+        const QList<link_t>& getLinks(){return wpt.links;}
 
         IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
         QPointF getPointCloseBy(const QPoint& ){return posScreen;}
@@ -103,10 +130,14 @@ class CGisItemWpt : public IGisItem
         void save(QDomNode& gpx);
         bool isCloseTo(const QPointF& pos);
         bool isGeocache(){return geocache.hasData;}
-        void gainUserFocus();
+        void gainUserFocus(bool yes);
 
         void edit();
 
+        static const QString &getNewName();
+        static const QString &getNewIcon();
+        static void getNewPosition(QPointF &pos);
+
     private:
         void genKey();
         void setIcon();
@@ -114,6 +145,9 @@ class CGisItemWpt : public IGisItem
         void writeGcExt(QDomNode& xmlCache);
 
         static QString keyUserFocus;
+        static QString lastName;
+        static QString lastIcon;
+
 
         // --- start all waypoint data ----
         wpt_t wpt;
@@ -127,6 +161,8 @@ class CGisItemWpt : public IGisItem
 
         // --- stop all waypoint data ----
 
+        QPointer<CScrOptWpt> scrOpt;
+
 };
 
 #endif //CGISITEMWPT_H
diff --git a/src/gis/wpt/CProjWpt.cpp b/src/gis/wpt/CProjWpt.cpp
index 4a1f8d5..a9bc037 100644
--- a/src/gis/wpt/CProjWpt.cpp
+++ b/src/gis/wpt/CProjWpt.cpp
@@ -101,21 +101,5 @@ void CProjWpt::accept()
         newWpt->setIcon(toolIcon->objectName());
     }
 
-    qreal ele = CMainWindow::self().getEelevationAt(pos * DEG_TO_RAD);
-    if(ele == NOFLOAT)
-    {
-        if(newWpt->getElevation() != NOINT)
-        {
-            newWpt->setElevation(NOINT);
-        }
-    }
-    else
-    {
-        if(newWpt->getElevation() != qRound(ele))
-        {
-            newWpt->setElevation(qRound(ele));
-        }
-    }
-
     QDialog::accept();
 }
diff --git a/src/gis/wpt/CScrOptWpt.cpp b/src/gis/wpt/CScrOptWpt.cpp
index 31d73e3..84f7c8f 100644
--- a/src/gis/wpt/CScrOptWpt.cpp
+++ b/src/gis/wpt/CScrOptWpt.cpp
@@ -27,21 +27,21 @@
 
 #include <QtWidgets>
 
-CScrOptWpt::CScrOptWpt(CGisItemWpt *wpt, const QPoint& origin, IMouse *parent)
+CScrOptWpt::CScrOptWpt(CGisItemWpt *wpt, const QPoint& point, IMouse *parent)
     : IScrOpt(parent->getCanvas())
     , key(wpt->getKey())
 {
     setupUi(this);
-    setOrigin(origin);
+    setOrigin(point);
     label->setFont(CMainWindow::self().getMapFont());
     label->setText(IGisItem::removeHtml(wpt->getInfo()));
+    adjustSize();
 
     toolMove->setEnabled(!wpt->isReadOnly());
     toolProj->setEnabled(!wpt->isGeocache());
 
-    anchor = wpt->getPointCloseBy(origin);
-    move(anchor.toPoint() + QPoint(30,30));
-    adjustSize();
+    anchor = wpt->getPointCloseBy(point);
+    move(anchor.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
     show();
 
     connect(toolDelete, SIGNAL(clicked()), this, SLOT(slotDelete()));
@@ -58,6 +58,7 @@ CScrOptWpt::~CScrOptWpt()
 void CScrOptWpt::slotDelete()
 {
     CGisWidget::self().delItemByKey(key);
+    deleteLater();
 }
 
 void CScrOptWpt::slotEdit()
@@ -89,20 +90,5 @@ void CScrOptWpt::draw(QPainter& p)
     }
     item->drawHighlight(p);
 
-    QRectF r = rect();
-    r.moveTopLeft(QPoint(x(), y()));
-    QPainterPath path1;
-    path1.addRoundedRect(r,5,5);
-
-    QPolygonF poly2;
-    poly2 << anchor << (r.topLeft() + QPointF(10,0)) << (r.topLeft() + QPointF(0,10)) << anchor;
-    QPainterPath path2;
-    path2.addPolygon(poly2);
-
-    path1 = path1.united(path2);
-
-    p.setPen(CCanvas::penBorderGray);
-    p.setBrush(CCanvas::brushBackWhite);
-    p.drawPolygon(path1.toFillPolygon());
-
+    drawBubble2(anchor, p);
 }
diff --git a/src/gis/wpt/CScrOptWpt.h b/src/gis/wpt/CScrOptWpt.h
index 227364d..4c25445 100644
--- a/src/gis/wpt/CScrOptWpt.h
+++ b/src/gis/wpt/CScrOptWpt.h
@@ -31,7 +31,7 @@ class CScrOptWpt : public IScrOpt , private Ui::IScrOptWpt
 {
     Q_OBJECT
     public:
-        CScrOptWpt(CGisItemWpt * wpt, const QPoint &origin, IMouse *parent);
+        CScrOptWpt(CGisItemWpt * wpt, const QPoint &point, IMouse *parent);
         virtual ~CScrOptWpt();
 
         void draw(QPainter& p);
diff --git a/src/gis/wpt/IDetailsWpt.ui b/src/gis/wpt/IDetailsWpt.ui
index db0e1fa..44db622 100644
--- a/src/gis/wpt/IDetailsWpt.ui
+++ b/src/gis/wpt/IDetailsWpt.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>550</width>
-    <height>567</height>
+    <height>378</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -17,10 +17,6 @@
    <iconset resource="../../resources.qrc">
     <normaloff>:/icons/32x32/Map.png</normaloff>:/icons/32x32/Map.png</iconset>
   </property>
-  <property name="styleSheet">
-   <string notr="true">background-color: rgb(255, 255, 255);
-color: rgb(0, 0, 0);</string>
-  </property>
   <layout class="QVBoxLayout" name="verticalLayout_3">
    <property name="spacing">
     <number>3</number>
@@ -39,33 +35,6 @@ color: rgb(0, 0, 0);</string>
    </property>
    <item>
     <layout class="QGridLayout" name="gridLayout">
-     <item row="4" column="0">
-      <layout class="QVBoxLayout" name="verticalLayout_2">
-       <item>
-        <widget class="QToolButton" name="toolEditDesc">
-         <property name="toolTip">
-          <string><html><head/><body><p>Edit description.</p></body></html></string>
-         </property>
-         <property name="text">
-          <string>...</string>
-         </property>
-         <property name="icon">
-          <iconset resource="../../resources.qrc">
-           <normaloff>:/icons/32x32/EditText.png</normaloff>:/icons/32x32/EditText.png</iconset>
-         </property>
-         <property name="iconSize">
-          <size>
-           <width>22</width>
-           <height>22</height>
-          </size>
-         </property>
-         <property name="autoRaise">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
      <item row="1" column="1">
       <layout class="QHBoxLayout" name="horizontalLayout_2">
        <item>
@@ -142,59 +111,76 @@ color: rgb(0, 0, 0);</string>
        </item>
       </layout>
      </item>
-     <item row="3" column="1">
-      <widget class="QTextBrowser" name="textCmt">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
+     <item row="6" column="1">
+      <spacer name="verticalSpacer">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
        </property>
-       <property name="frameShape">
-        <enum>QFrame::NoFrame</enum>
+       <property name="sizeType">
+        <enum>QSizePolicy::Expanding</enum>
        </property>
-      </widget>
-     </item>
-     <item row="4" column="1">
-      <widget class="QTextBrowser" name="textDesc">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
        </property>
+      </spacer>
+     </item>
+     <item row="5" column="1">
+      <widget class="QTextBrowser" name="textHistory">
        <property name="frameShape">
         <enum>QFrame::NoFrame</enum>
        </property>
       </widget>
      </item>
-     <item row="3" column="0">
-      <layout class="QVBoxLayout" name="verticalLayout">
+     <item row="2" column="1">
+      <layout class="QHBoxLayout" name="horizontalLayout_3">
        <item>
-        <widget class="QToolButton" name="toolEditCmt">
-         <property name="toolTip">
-          <string><html><head/><body><p>Edit comment.</p></body></html></string>
+        <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>...</string>
-         </property>
-         <property name="icon">
-          <iconset resource="../../resources.qrc">
-           <normaloff>:/icons/32x32/EditText.png</normaloff>:/icons/32x32/EditText.png</iconset>
-         </property>
-         <property name="iconSize">
-          <size>
-           <width>22</width>
-           <height>22</height>
-          </size>
+          <string>Date/Time:</string>
          </property>
-         <property name="autoRaise">
-          <bool>true</bool>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="labelTime">
+         <property name="text">
+          <string>-</string>
          </property>
         </widget>
        </item>
       </layout>
      </item>
+     <item row="3" column="1">
+      <widget class="QTextBrowser" name="textCmtDesc">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="frameShape">
+        <enum>QFrame::NoFrame</enum>
+       </property>
+       <property name="openLinks">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="1">
+      <widget class="Line" name="line_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+      </widget>
+     </item>
      <item row="0" column="1">
       <layout class="QHBoxLayout" name="horizontalLayout">
        <item>
@@ -283,53 +269,6 @@ color: rgb(0, 0, 0);</string>
        </property>
       </widget>
      </item>
-     <item row="5" column="1">
-      <widget class="QTextBrowser" name="textHistory">
-       <property name="frameShape">
-        <enum>QFrame::NoFrame</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="1">
-      <layout class="QHBoxLayout" name="horizontalLayout_3">
-       <item>
-        <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>Date/Time:</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="labelTime">
-         <property name="text">
-          <string>-</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="6" column="1">
-      <spacer name="verticalSpacer">
-       <property name="orientation">
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeType">
-        <enum>QSizePolicy::Expanding</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>20</width>
-         <height>40</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
     </layout>
    </item>
   </layout>
diff --git a/src/grid/CGrid.cpp b/src/grid/CGrid.cpp
index 8c16f37..a134a4f 100644
--- a/src/grid/CGrid.cpp
+++ b/src/grid/CGrid.cpp
@@ -90,9 +90,9 @@ void CGrid::setProjAndColor(const QString& proj, const QColor& c)
 
 }
 
-void CGrid::findGridSpace(double min, double max, double& xSpace, double& ySpace)
+void CGrid::findGridSpace(qreal min, qreal max, qreal& xSpace, qreal& ySpace)
 {
-    double dX = qAbs(min - max) / 10;
+    qreal dX = qAbs(min - max) / 10;
     if(dX < M_PI/180000)
     {
         xSpace = 5*M_PI/1800000;
@@ -178,19 +178,19 @@ void CGrid::findGridSpace(double min, double max, double& xSpace, double& ySpace
 }
 
 
-bool CGrid::calcIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, double& x, double& y)
+bool CGrid::calcIntersection(qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4, qreal& x, qreal& y)
 {
-    double ua = ((x4 - x3)*(y1 - y3) - (y4 - y3)*(x1 - x3))/((y4 - y3)*(x2 - x1) - (x4 - x3)*(y2 - y1));
+    qreal ua = ((x4 - x3)*(y1 - y3) - (y4 - y3)*(x1 - x3))/((y4 - y3)*(x2 - x1) - (x4 - x3)*(y2 - y1));
 
     x = x1 + ua * (x2 - x1);
     y = y1 + ua * (y2 - y1);
 
-    double d12 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
-    double d1x = (x1 - x)  * (x1 - x)  + (y1 - y)  * (y1 - y);
-    double d2x = (x2 - x)  * (x2 - x)  + (y2 - y)  * (y2 - y);
-    double d34 = (x4 - x3) * (x4 - x3) + (y4 - y3) * (y4 - y3);
-    double d3x = (x3 - x)  * (x3 - x)  + (y3 - y)  * (y3 - y);
-    double d4x = (x4 - x)  * (x4 - x)  + (y4 - y)  * (y4 - y);
+    qreal d12 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
+    qreal d1x = (x1 - x)  * (x1 - x)  + (y1 - y)  * (y1 - y);
+    qreal d2x = (x2 - x)  * (x2 - x)  + (y2 - y)  * (y2 - y);
+    qreal d34 = (x4 - x3) * (x4 - x3) + (y4 - y3) * (y4 - y3);
+    qreal d3x = (x3 - x)  * (x3 - x)  + (y3 - y)  * (y3 - y);
+    qreal d4x = (x4 - x)  * (x4 - x)  + (y4 - y)  * (y4 - y);
 
     return (d12 >= d1x) && (d12 >= d2x) && (d34 >= d3x) && (d34 >= d4x);
 }
@@ -198,9 +198,9 @@ bool CGrid::calcIntersection(double x1, double y1, double x2, double y2, double
 
 struct val_t
 {
-    val_t(qint32 pos, double val) : pos(pos), val(val){}
+    val_t(qint32 pos, qreal val) : pos(pos), val(val){}
     qint32 pos;
-    double val;
+    qreal val;
 };
 
 void CGrid::draw(QPainter& p, const QRect& rect)
@@ -234,20 +234,20 @@ void CGrid::draw(QPainter& p, const QRect& rect)
     //    qDebug() << topLeft.v  - btmLeft.v;
     //    qDebug() << topRight.v - btmRight.v;
 
-    double topMax   = topLeft.y()  > topRight.y()   ? topLeft.y()  : topRight.y();
-    double btmMin   = btmLeft.y()  < btmRight.y()   ? btmLeft.y()  : btmRight.y();
-    double leftMin  = topLeft.x()  < btmLeft.x()    ? topLeft.x()  : btmLeft.x();
-    double rightMax = topRight.x() > btmRight.x()   ? topRight.x() : btmRight.x();
+    qreal topMax   = topLeft.y()  > topRight.y()   ? topLeft.y()  : topRight.y();
+    qreal btmMin   = btmLeft.y()  < btmRight.y()   ? btmLeft.y()  : btmRight.y();
+    qreal leftMin  = topLeft.x()  < btmLeft.x()    ? topLeft.x()  : btmLeft.x();
+    qreal rightMax = topRight.x() > btmRight.x()   ? topRight.x() : btmRight.x();
 
-    double xGridSpace = 1000;
-    double yGridSpace = 1000;
+    qreal xGridSpace = 1000;
+    qreal yGridSpace = 1000;
     findGridSpace(leftMin, rightMax, xGridSpace, yGridSpace);
 
-    double xStart = floor(leftMin / xGridSpace) * xGridSpace;
-    double yStart = ceil(topMax / yGridSpace) * yGridSpace;
+    qreal xStart = floor(leftMin / xGridSpace) * xGridSpace;
+    qreal yStart = ceil(topMax / yGridSpace) * yGridSpace;
 
-    double x = xStart - xGridSpace;
-    double y = yStart + yGridSpace;
+    qreal x = xStart - xGridSpace;
+    qreal y = yStart + yGridSpace;
 
     if(pj_is_latlong(pjGrid))
     {
@@ -277,8 +277,8 @@ void CGrid::draw(QPainter& p, const QRect& rect)
     p.setPen(QPen(color,1));
     USE_ANTI_ALIASING(p,false);
 
-    double h = rect.height();
-    double w = rect.width();
+    qreal h = rect.height();
+    qreal w = rect.width();
 
     while(y > btmMin)
     {
@@ -290,8 +290,8 @@ void CGrid::draw(QPainter& p, const QRect& rect)
             QPointF p4(x, y - yGridSpace);
 
 
-            double xVal = p1.x();
-            double yVal = p1.y();
+            qreal xVal = p1.x();
+            qreal yVal = p1.y();
 
             pj_transform(pjGrid, pjWGS84, 1, 0, &p1.rx(), &p1.ry(), 0);
             pj_transform(pjGrid, pjWGS84, 1, 0, &p2.rx(), &p2.ry(), 0);
@@ -305,7 +305,7 @@ void CGrid::draw(QPainter& p, const QRect& rect)
             map->convertRad2Px(p3);
             map->convertRad2Px(p4);
 
-            double xx,yy;
+            qreal xx,yy;
             if(calcIntersection(0,0,w,0, p1.x(), p1.y(), p4.x(), p4.y(), xx, yy))
             {
                 horzTopTicks << val_t(xx, xVal);
diff --git a/src/grid/CGrid.h b/src/grid/CGrid.h
index 972ec74..279fb57 100644
--- a/src/grid/CGrid.h
+++ b/src/grid/CGrid.h
@@ -44,8 +44,8 @@ class CGrid : public QObject
 
     private:
         friend class CGridSetup;
-        void findGridSpace(double min, double max, double& xSpace, double& ySpace);
-        bool calcIntersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4, double& x, double& y);
+        void findGridSpace(qreal min, qreal max, qreal& xSpace, qreal& ySpace);
+        bool calcIntersection(qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4, qreal& x, qreal& y);
 
         CMapDraw * map;
 
diff --git a/src/helpers/CSelectProjectDialog.cpp b/src/helpers/CSelectProjectDialog.cpp
new file mode 100644
index 0000000..120d235
--- /dev/null
+++ b/src/helpers/CSelectProjectDialog.cpp
@@ -0,0 +1,82 @@
+/**********************************************************************************************
+    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 "helpers/CSelectProjectDialog.h"
+#include "gis/CGisProject.h"
+
+#include <QtWidgets>
+
+CSelectProjectDialog::CSelectProjectDialog(QString &key, QString &name, QTreeWidget * parent)
+    : QDialog(parent)
+    , key(key)
+    , name(name)
+{
+    setupUi(this);
+
+    for(int i = 0; i < parent->topLevelItemCount(); i++)
+    {
+        CGisProject * project = dynamic_cast<CGisProject*>(parent->topLevelItem(i));
+        if(project == 0)
+        {
+         continue;
+        }
+
+        QListWidgetItem * item = new QListWidgetItem(project->icon(0), project->text(0),listWidget);
+        item->setData(Qt::UserRole, project->getKey());
+    }
+
+    buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+
+    connect(listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(slotItemClicked(QListWidgetItem*)));
+    connect(lineEdit, SIGNAL(textChanged(QString)), this, SLOT(slotProjectChanged(QString)));
+    connect(lineEdit, SIGNAL(textEdited(QString)), this, SLOT(slotProjectEdited(QString)));
+
+}
+
+CSelectProjectDialog::~CSelectProjectDialog()
+{
+
+}
+
+void CSelectProjectDialog::reject()
+{
+    key.clear();
+    name.clear();
+
+    QDialog::reject();
+}
+
+void CSelectProjectDialog::slotItemClicked(QListWidgetItem * item)
+{
+
+    key = item->data(Qt::UserRole).toString();
+    lineEdit->setText(item->text());
+}
+
+void CSelectProjectDialog::slotProjectChanged(const QString& text)
+{
+    buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!text.isEmpty());
+    name = text;
+}
+
+void CSelectProjectDialog::slotProjectEdited(const QString& text)
+{
+    buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!text.isEmpty());
+    key.clear();
+    name = text;
+}
diff --git a/src/gis/wpt/CDetailsWpt.h b/src/helpers/CSelectProjectDialog.h
similarity index 62%
copy from src/gis/wpt/CDetailsWpt.h
copy to src/helpers/CSelectProjectDialog.h
index b160919..25150e2 100644
--- a/src/gis/wpt/CDetailsWpt.h
+++ b/src/helpers/CSelectProjectDialog.h
@@ -16,32 +16,34 @@
 
 **********************************************************************************************/
 
-#ifndef CDETAILSWPT_H
-#define CDETAILSWPT_H
+#ifndef CSELECTPROJECTDIALOG_H
+#define CSELECTPROJECTDIALOG_H
 
 #include <QDialog>
-#include "ui_IDetailsWpt.h"
+#include "ui_ISelectProjectDialog.h"
 
-class CGisItemWpt;
+class QTreeWidget;
 
-class CDetailsWpt : public QDialog, private Ui::IDetailsWpt
-{    
+class CSelectProjectDialog : public QDialog, private Ui::ISelectProjectDialog
+{
     Q_OBJECT
     public:
-        CDetailsWpt(CGisItemWpt& wpt, QWidget * parent);
-        virtual ~CDetailsWpt();
+        CSelectProjectDialog(QString& key, QString& name, QTreeWidget *parent);
+        virtual ~CSelectProjectDialog();
+
+    public slots:
+        void reject();
 
     private slots:
-        void slotLinkActivated(const QString& link);
-        void slotChangeIcon();
-        void slotChangeCmt();
-        void slotChangeDesc();
-        void slotChangeReadOnlyMode(bool on);
+        void slotItemClicked(QListWidgetItem * item);
+        void slotProjectChanged(const QString& text);
+        void slotProjectEdited(const QString& text);
 
     private:
-        void setupGui();
-        CGisItemWpt& wpt;
+        QString& key;
+        QString& name;
+
 };
 
-#endif //CDETAILSWPT_H
+#endif //CSELECTPROJECTDIALOG_H
 
diff --git a/src/helpers/ISelectProjectDialog.ui b/src/helpers/ISelectProjectDialog.ui
new file mode 100644
index 0000000..40d521b
--- /dev/null
+++ b/src/helpers/ISelectProjectDialog.ui
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ISelectProjectDialog</class>
+ <widget class="QDialog" name="ISelectProjectDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Select a project...</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Select project from list or enter new project name.</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QListWidget" name="listWidget"/>
+   </item>
+   <item>
+    <widget class="QLineEdit" name="lineEdit"/>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ISelectProjectDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ISelectProjectDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/helpers/ITextEditWidget.ui b/src/helpers/ITextEditWidget.ui
index 7a3b091..2c512db 100644
--- a/src/helpers/ITextEditWidget.ui
+++ b/src/helpers/ITextEditWidget.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>686</width>
+    <width>366</width>
     <height>341</height>
    </rect>
   </property>
@@ -92,27 +92,7 @@
       </widget>
      </item>
      <item>
-      <spacer>
-       <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>
-    <layout class="QHBoxLayout">
-     <property name="spacing">
-      <number>2</number>
-     </property>
-     <item>
-      <widget class="QToolButton" name="toolBold">
+      <widget class="QToolButton" name="toolLeft">
        <property name="text">
         <string>...</string>
        </property>
@@ -125,7 +105,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QToolButton" name="toolItalic">
+      <widget class="QToolButton" name="toolCenter">
        <property name="text">
         <string>...</string>
        </property>
@@ -138,7 +118,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QToolButton" name="toolUnder">
+      <widget class="QToolButton" name="toolRight">
        <property name="text">
         <string>...</string>
        </property>
@@ -151,7 +131,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QToolButton" name="toolLeft">
+      <widget class="QToolButton" name="toolBlock">
        <property name="text">
         <string>...</string>
        </property>
@@ -164,7 +144,27 @@
       </widget>
      </item>
      <item>
-      <widget class="QToolButton" name="toolCenter">
+      <spacer>
+       <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>
+    <layout class="QHBoxLayout">
+     <property name="spacing">
+      <number>2</number>
+     </property>
+     <item>
+      <widget class="QToolButton" name="toolBold">
        <property name="text">
         <string>...</string>
        </property>
@@ -177,7 +177,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QToolButton" name="toolRight">
+      <widget class="QToolButton" name="toolItalic">
        <property name="text">
         <string>...</string>
        </property>
@@ -190,7 +190,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QToolButton" name="toolBlock">
+      <widget class="QToolButton" name="toolUnder">
        <property name="text">
         <string>...</string>
        </property>
@@ -219,12 +219,6 @@
       <widget class="QComboBox" name="comboStyle"/>
      </item>
      <item>
-      <widget class="QFontComboBox" name="comboFont"/>
-     </item>
-     <item>
-      <widget class="QComboBox" name="comboSize"/>
-     </item>
-     <item>
       <spacer>
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
@@ -240,6 +234,16 @@
     </layout>
    </item>
    <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QFontComboBox" name="comboFont"/>
+     </item>
+     <item>
+      <widget class="QComboBox" name="comboSize"/>
+     </item>
+    </layout>
+   </item>
+   <item>
     <widget class="QTextEdit" name="textEdit"/>
    </item>
    <item>
diff --git a/src/icons/16x16/2DFix.png b/src/icons/16x16/2DFix.png
deleted file mode 100644
index bf9f303..0000000
Binary files a/src/icons/16x16/2DFix.png and /dev/null differ
diff --git a/src/icons/16x16/3DFix.png b/src/icons/16x16/3DFix.png
deleted file mode 100644
index cafb2f5..0000000
Binary files a/src/icons/16x16/3DFix.png and /dev/null differ
diff --git a/src/icons/16x16/Add.png b/src/icons/16x16/Add.png
deleted file mode 100644
index 6392ae2..0000000
Binary files a/src/icons/16x16/Add.png and /dev/null differ
diff --git a/src/icons/16x16/AddMapWorkspace.png b/src/icons/16x16/AddMapWorkspace.png
deleted file mode 100644
index 1d17089..0000000
Binary files a/src/icons/16x16/AddMapWorkspace.png and /dev/null differ
diff --git a/src/icons/16x16/Cancel.png b/src/icons/16x16/Cancel.png
deleted file mode 100644
index f89091c..0000000
Binary files a/src/icons/16x16/Cancel.png and /dev/null differ
diff --git a/src/icons/16x16/Check.png b/src/icons/16x16/Check.png
deleted file mode 100644
index 09ca5bb..0000000
Binary files a/src/icons/16x16/Check.png and /dev/null differ
diff --git a/src/icons/16x16/Close.png b/src/icons/16x16/Close.png
deleted file mode 100644
index 0630a83..0000000
Binary files a/src/icons/16x16/Close.png and /dev/null differ
diff --git a/src/icons/16x16/Copy.png b/src/icons/16x16/Copy.png
deleted file mode 100644
index 37e8b15..0000000
Binary files a/src/icons/16x16/Copy.png and /dev/null differ
diff --git a/src/icons/16x16/Cut.png b/src/icons/16x16/Cut.png
deleted file mode 100644
index 4038594..0000000
Binary files a/src/icons/16x16/Cut.png and /dev/null differ
diff --git a/src/icons/16x16/DeleteMultiple.png b/src/icons/16x16/DeleteMultiple.png
deleted file mode 100644
index 48a6784..0000000
Binary files a/src/icons/16x16/DeleteMultiple.png and /dev/null differ
diff --git a/src/icons/16x16/DeleteOne.png b/src/icons/16x16/DeleteOne.png
deleted file mode 100644
index d681c15..0000000
Binary files a/src/icons/16x16/DeleteOne.png and /dev/null differ
diff --git a/src/icons/16x16/Down.png b/src/icons/16x16/Down.png
deleted file mode 100644
index 66e18f2..0000000
Binary files a/src/icons/16x16/Down.png and /dev/null differ
diff --git a/src/icons/16x16/EditDetails.png b/src/icons/16x16/EditDetails.png
deleted file mode 100644
index 8ba6c6a..0000000
Binary files a/src/icons/16x16/EditDetails.png and /dev/null differ
diff --git a/src/icons/16x16/EditText.png b/src/icons/16x16/EditText.png
deleted file mode 100644
index 020eb1f..0000000
Binary files a/src/icons/16x16/EditText.png and /dev/null differ
diff --git a/src/icons/16x16/FolderDEM.png b/src/icons/16x16/FolderDEM.png
deleted file mode 100644
index 2444749..0000000
Binary files a/src/icons/16x16/FolderDEM.png and /dev/null differ
diff --git a/src/icons/16x16/FolderMap.png b/src/icons/16x16/FolderMap.png
deleted file mode 100644
index 322f5c1..0000000
Binary files a/src/icons/16x16/FolderMap.png and /dev/null differ
diff --git a/src/icons/16x16/Font.png b/src/icons/16x16/Font.png
deleted file mode 100644
index 78c9975..0000000
Binary files a/src/icons/16x16/Font.png and /dev/null differ
diff --git a/src/icons/16x16/FromMap.png b/src/icons/16x16/FromMap.png
deleted file mode 100644
index 6a3b1ec..0000000
Binary files a/src/icons/16x16/FromMap.png and /dev/null differ
diff --git a/src/icons/16x16/GisProject.png b/src/icons/16x16/GisProject.png
deleted file mode 100644
index eafc322..0000000
Binary files a/src/icons/16x16/GisProject.png and /dev/null differ
diff --git a/src/icons/16x16/Grid.png b/src/icons/16x16/Grid.png
deleted file mode 100644
index 408dbc3..0000000
Binary files a/src/icons/16x16/Grid.png and /dev/null differ
diff --git a/src/icons/16x16/GridSetup.png b/src/icons/16x16/GridSetup.png
deleted file mode 100644
index c3a5399..0000000
Binary files a/src/icons/16x16/GridSetup.png and /dev/null differ
diff --git a/src/icons/16x16/GridWizzard.png b/src/icons/16x16/GridWizzard.png
deleted file mode 100644
index 60a6874..0000000
Binary files a/src/icons/16x16/GridWizzard.png and /dev/null differ
diff --git a/src/icons/16x16/Help.png b/src/icons/16x16/Help.png
deleted file mode 100644
index 1289b61..0000000
Binary files a/src/icons/16x16/Help.png and /dev/null differ
diff --git a/src/icons/16x16/Info.png b/src/icons/16x16/Info.png
deleted file mode 100644
index d7a00b7..0000000
Binary files a/src/icons/16x16/Info.png and /dev/null differ
diff --git a/src/icons/16x16/LoadGIS.png b/src/icons/16x16/LoadGIS.png
deleted file mode 100644
index 0ee0ddf..0000000
Binary files a/src/icons/16x16/LoadGIS.png and /dev/null differ
diff --git a/src/icons/16x16/Lock.png b/src/icons/16x16/Lock.png
deleted file mode 100644
index 341d99b..0000000
Binary files a/src/icons/16x16/Lock.png and /dev/null differ
diff --git a/src/icons/16x16/Map.png b/src/icons/16x16/Map.png
deleted file mode 100644
index 401a794..0000000
Binary files a/src/icons/16x16/Map.png and /dev/null differ
diff --git a/src/icons/16x16/MimeDemVRT.png b/src/icons/16x16/MimeDemVRT.png
deleted file mode 100644
index aa71518..0000000
Binary files a/src/icons/16x16/MimeDemVRT.png and /dev/null differ
diff --git a/src/icons/16x16/MimeIMG.png b/src/icons/16x16/MimeIMG.png
deleted file mode 100644
index f037343..0000000
Binary files a/src/icons/16x16/MimeIMG.png and /dev/null differ
diff --git a/src/icons/16x16/MimeJNX.png b/src/icons/16x16/MimeJNX.png
deleted file mode 100644
index ec388e2..0000000
Binary files a/src/icons/16x16/MimeJNX.png and /dev/null differ
diff --git a/src/icons/16x16/MimeMAP.png b/src/icons/16x16/MimeMAP.png
deleted file mode 100644
index 7b17253..0000000
Binary files a/src/icons/16x16/MimeMAP.png and /dev/null differ
diff --git a/src/icons/16x16/MimeRMAP.png b/src/icons/16x16/MimeRMAP.png
deleted file mode 100644
index 02f68a0..0000000
Binary files a/src/icons/16x16/MimeRMAP.png and /dev/null differ
diff --git a/src/icons/16x16/MimeVRT.png b/src/icons/16x16/MimeVRT.png
deleted file mode 100644
index fc9de44..0000000
Binary files a/src/icons/16x16/MimeVRT.png and /dev/null differ
diff --git a/src/icons/16x16/MouseWheel.png b/src/icons/16x16/MouseWheel.png
deleted file mode 100644
index 130fa0f..0000000
Binary files a/src/icons/16x16/MouseWheel.png and /dev/null differ
diff --git a/src/icons/16x16/NightDay.png b/src/icons/16x16/NightDay.png
deleted file mode 100644
index 7ff1850..0000000
Binary files a/src/icons/16x16/NightDay.png and /dev/null differ
diff --git a/src/icons/16x16/NoFix.png b/src/icons/16x16/NoFix.png
deleted file mode 100644
index 83e58fa..0000000
Binary files a/src/icons/16x16/NoFix.png and /dev/null differ
diff --git a/src/icons/16x16/Off.png b/src/icons/16x16/Off.png
deleted file mode 100644
index 8925caf..0000000
Binary files a/src/icons/16x16/Off.png and /dev/null differ
diff --git a/src/icons/16x16/POIText.png b/src/icons/16x16/POIText.png
deleted file mode 100644
index 1eff71a..0000000
Binary files a/src/icons/16x16/POIText.png and /dev/null differ
diff --git a/src/icons/16x16/Paste.png b/src/icons/16x16/Paste.png
deleted file mode 100644
index 9299483..0000000
Binary files a/src/icons/16x16/Paste.png and /dev/null differ
diff --git a/src/icons/16x16/QMapShack.png b/src/icons/16x16/QMapShack.png
deleted file mode 100644
index a851d23..0000000
Binary files a/src/icons/16x16/QMapShack.png and /dev/null differ
diff --git a/src/icons/16x16/Redo.png b/src/icons/16x16/Redo.png
deleted file mode 100644
index 152d108..0000000
Binary files a/src/icons/16x16/Redo.png and /dev/null differ
diff --git a/src/icons/16x16/Reset.png b/src/icons/16x16/Reset.png
deleted file mode 100644
index 88a25c7..0000000
Binary files a/src/icons/16x16/Reset.png and /dev/null differ
diff --git a/src/icons/16x16/Right.png b/src/icons/16x16/Right.png
deleted file mode 100644
index 7488791..0000000
Binary files a/src/icons/16x16/Right.png and /dev/null differ
diff --git a/src/icons/16x16/Route.png b/src/icons/16x16/Route.png
deleted file mode 100644
index bdc60e2..0000000
Binary files a/src/icons/16x16/Route.png and /dev/null differ
diff --git a/src/icons/16x16/SaveAllGIS.png b/src/icons/16x16/SaveAllGIS.png
deleted file mode 100644
index b3e087e..0000000
Binary files a/src/icons/16x16/SaveAllGIS.png and /dev/null differ
diff --git a/src/icons/16x16/SaveGIS.png b/src/icons/16x16/SaveGIS.png
deleted file mode 100644
index 20efb45..0000000
Binary files a/src/icons/16x16/SaveGIS.png and /dev/null differ
diff --git a/src/icons/16x16/Scale.png b/src/icons/16x16/Scale.png
deleted file mode 100644
index b443296..0000000
Binary files a/src/icons/16x16/Scale.png and /dev/null differ
diff --git a/src/icons/16x16/SelectColor.png b/src/icons/16x16/SelectColor.png
deleted file mode 100644
index 1d9db1b..0000000
Binary files a/src/icons/16x16/SelectColor.png and /dev/null differ
diff --git a/src/icons/16x16/SetupMapWorkspace.png b/src/icons/16x16/SetupMapWorkspace.png
deleted file mode 100644
index f1c923f..0000000
Binary files a/src/icons/16x16/SetupMapWorkspace.png and /dev/null differ
diff --git a/src/icons/16x16/Tainted.png b/src/icons/16x16/Tainted.png
deleted file mode 100644
index 0aa8787..0000000
Binary files a/src/icons/16x16/Tainted.png and /dev/null differ
diff --git a/src/icons/16x16/TextBold.png b/src/icons/16x16/TextBold.png
deleted file mode 100644
index 03511aa..0000000
Binary files a/src/icons/16x16/TextBold.png and /dev/null differ
diff --git a/src/icons/16x16/TextCenter.png b/src/icons/16x16/TextCenter.png
deleted file mode 100644
index 1f6ff0a..0000000
Binary files a/src/icons/16x16/TextCenter.png and /dev/null differ
diff --git a/src/icons/16x16/TextItalic.png b/src/icons/16x16/TextItalic.png
deleted file mode 100644
index f835405..0000000
Binary files a/src/icons/16x16/TextItalic.png and /dev/null differ
diff --git a/src/icons/16x16/TextJustified.png b/src/icons/16x16/TextJustified.png
deleted file mode 100644
index d690e97..0000000
Binary files a/src/icons/16x16/TextJustified.png and /dev/null differ
diff --git a/src/icons/16x16/TextLeft.png b/src/icons/16x16/TextLeft.png
deleted file mode 100644
index 706ee38..0000000
Binary files a/src/icons/16x16/TextLeft.png and /dev/null differ
diff --git a/src/icons/16x16/TextRight.png b/src/icons/16x16/TextRight.png
deleted file mode 100644
index 1fdb13c..0000000
Binary files a/src/icons/16x16/TextRight.png and /dev/null differ
diff --git a/src/icons/16x16/TextUnderlined.png b/src/icons/16x16/TextUnderlined.png
deleted file mode 100644
index dde7945..0000000
Binary files a/src/icons/16x16/TextUnderlined.png and /dev/null differ
diff --git a/src/icons/16x16/TimeZoneSetup.png b/src/icons/16x16/TimeZoneSetup.png
deleted file mode 100644
index dad688c..0000000
Binary files a/src/icons/16x16/TimeZoneSetup.png and /dev/null differ
diff --git a/src/icons/16x16/ToBottom.png b/src/icons/16x16/ToBottom.png
deleted file mode 100644
index 174d72f..0000000
Binary files a/src/icons/16x16/ToBottom.png and /dev/null differ
diff --git a/src/icons/16x16/ToTop.png b/src/icons/16x16/ToTop.png
deleted file mode 100644
index c74e530..0000000
Binary files a/src/icons/16x16/ToTop.png and /dev/null differ
diff --git a/src/icons/16x16/ToolTip.png b/src/icons/16x16/ToolTip.png
deleted file mode 100644
index dd3d7a1..0000000
Binary files a/src/icons/16x16/ToolTip.png and /dev/null differ
diff --git a/src/icons/16x16/Track.png b/src/icons/16x16/Track.png
deleted file mode 100644
index 005fdd0..0000000
Binary files a/src/icons/16x16/Track.png and /dev/null differ
diff --git a/src/icons/16x16/UnLock.png b/src/icons/16x16/UnLock.png
deleted file mode 100644
index 7b91225..0000000
Binary files a/src/icons/16x16/UnLock.png and /dev/null differ
diff --git a/src/icons/16x16/Undo.png b/src/icons/16x16/Undo.png
deleted file mode 100644
index e1d8d2d..0000000
Binary files a/src/icons/16x16/Undo.png and /dev/null differ
diff --git a/src/icons/16x16/Up.png b/src/icons/16x16/Up.png
deleted file mode 100644
index 5c918ba..0000000
Binary files a/src/icons/16x16/Up.png and /dev/null differ
diff --git a/src/icons/16x16/WptMove.png b/src/icons/16x16/WptMove.png
deleted file mode 100644
index 637d557..0000000
Binary files a/src/icons/16x16/WptMove.png and /dev/null differ
diff --git a/src/icons/16x16/WptProj.png b/src/icons/16x16/WptProj.png
deleted file mode 100644
index ae26822..0000000
Binary files a/src/icons/16x16/WptProj.png and /dev/null differ
diff --git a/src/icons/32x32/AddArea.png b/src/icons/32x32/AddArea.png
new file mode 100644
index 0000000..7c0b909
Binary files /dev/null and b/src/icons/32x32/AddArea.png differ
diff --git a/src/icons/32x32/AddTrk.png b/src/icons/32x32/AddTrk.png
new file mode 100644
index 0000000..b855e2e
Binary files /dev/null and b/src/icons/32x32/AddTrk.png differ
diff --git a/src/icons/32x32/AddWpt.png b/src/icons/32x32/AddWpt.png
new file mode 100644
index 0000000..8b7016f
Binary files /dev/null and b/src/icons/32x32/AddWpt.png differ
diff --git a/src/icons/32x32/Area.png b/src/icons/32x32/Area.png
new file mode 100644
index 0000000..e17ad0a
Binary files /dev/null and b/src/icons/32x32/Area.png differ
diff --git a/src/icons/32x32/AreaMove.png b/src/icons/32x32/AreaMove.png
new file mode 100644
index 0000000..5fa1037
Binary files /dev/null and b/src/icons/32x32/AreaMove.png differ
diff --git a/src/icons/32x32/LineMove.png b/src/icons/32x32/LineMove.png
new file mode 100644
index 0000000..9b2684b
Binary files /dev/null and b/src/icons/32x32/LineMove.png differ
diff --git a/src/icons/32x32/MimeWMTS.png b/src/icons/32x32/MimeWMTS.png
new file mode 100644
index 0000000..6307afb
Binary files /dev/null and b/src/icons/32x32/MimeWMTS.png differ
diff --git a/src/icons/32x32/PointMove.png b/src/icons/32x32/PointMove.png
new file mode 100644
index 0000000..5064cf9
Binary files /dev/null and b/src/icons/32x32/PointMove.png differ
diff --git a/src/icons/32x32/SelectRange.png b/src/icons/32x32/SelectRange.png
new file mode 100644
index 0000000..1b41b92
Binary files /dev/null and b/src/icons/32x32/SelectRange.png differ
diff --git a/src/icons/32x32/Tainted.png b/src/icons/32x32/Tainted.png
index 0fdf791..78a19b6 100644
Binary files a/src/icons/32x32/Tainted.png and b/src/icons/32x32/Tainted.png differ
diff --git a/src/icons/32x32/TrkCut.png b/src/icons/32x32/TrkCut.png
new file mode 100644
index 0000000..5479e83
Binary files /dev/null and b/src/icons/32x32/TrkCut.png differ
diff --git a/src/icons/32x32/TrkProfile.png b/src/icons/32x32/TrkProfile.png
new file mode 100644
index 0000000..6544583
Binary files /dev/null and b/src/icons/32x32/TrkProfile.png differ
diff --git a/src/icons/48x48/AddArea.png b/src/icons/48x48/AddArea.png
new file mode 100644
index 0000000..b8a39e5
Binary files /dev/null and b/src/icons/48x48/AddArea.png differ
diff --git a/src/icons/48x48/AddTrk.png b/src/icons/48x48/AddTrk.png
new file mode 100644
index 0000000..8c25f27
Binary files /dev/null and b/src/icons/48x48/AddTrk.png differ
diff --git a/src/icons/48x48/AddWpt.png b/src/icons/48x48/AddWpt.png
new file mode 100644
index 0000000..89ad965
Binary files /dev/null and b/src/icons/48x48/AddWpt.png differ
diff --git a/src/icons/48x48/Area.png b/src/icons/48x48/Area.png
new file mode 100644
index 0000000..782057a
Binary files /dev/null and b/src/icons/48x48/Area.png differ
diff --git a/src/icons/48x48/AreaMove.png b/src/icons/48x48/AreaMove.png
new file mode 100644
index 0000000..2a81bc9
Binary files /dev/null and b/src/icons/48x48/AreaMove.png differ
diff --git a/src/icons/48x48/LineMove.png b/src/icons/48x48/LineMove.png
new file mode 100644
index 0000000..d1b2866
Binary files /dev/null and b/src/icons/48x48/LineMove.png differ
diff --git a/src/icons/48x48/MimeWMTS.png b/src/icons/48x48/MimeWMTS.png
new file mode 100644
index 0000000..b814110
Binary files /dev/null and b/src/icons/48x48/MimeWMTS.png differ
diff --git a/src/icons/48x48/PointMove.png b/src/icons/48x48/PointMove.png
new file mode 100644
index 0000000..efc0615
Binary files /dev/null and b/src/icons/48x48/PointMove.png differ
diff --git a/src/icons/48x48/SelectRange.png b/src/icons/48x48/SelectRange.png
new file mode 100644
index 0000000..233ce9f
Binary files /dev/null and b/src/icons/48x48/SelectRange.png differ
diff --git a/src/icons/48x48/Tainted.png b/src/icons/48x48/Tainted.png
index f00af4d..3184b25 100644
Binary files a/src/icons/48x48/Tainted.png and b/src/icons/48x48/Tainted.png differ
diff --git a/src/icons/48x48/TrkCut.png b/src/icons/48x48/TrkCut.png
new file mode 100644
index 0000000..2f2144e
Binary files /dev/null and b/src/icons/48x48/TrkCut.png differ
diff --git a/src/icons/48x48/TrkProfile.png b/src/icons/48x48/TrkProfile.png
new file mode 100644
index 0000000..910df33
Binary files /dev/null and b/src/icons/48x48/TrkProfile.png differ
diff --git a/src/icons/AddArea.svg b/src/icons/AddArea.svg
new file mode 100644
index 0000000..e214f48
--- /dev/null
+++ b/src/icons/AddArea.svg
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3377"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="AddArea.svg">
+  <defs
+     id="defs3379">
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="pattern6165"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image6167"
+         height="260"
+         width="260" />
+    </pattern>
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="pattern6153"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image6155"
+         height="260"
+         width="260" />
+    </pattern>
+    <linearGradient
+       id="linearGradient6147"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop6149" />
+    </linearGradient>
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="pattern6139"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image6141"
+         height="260"
+         width="260" />
+    </pattern>
+    <linearGradient
+       id="linearGradient6133"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000080;stop-opacity:1;"
+         offset="0"
+         id="stop6135" />
+    </linearGradient>
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="pattern5660"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image5662"
+         height="260"
+         width="260" />
+    </pattern>
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="sand_bitmap"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image9"
+         height="260"
+         width="260" />
+    </pattern>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11"
+     inkscape:cx="4.0115391"
+     inkscape:cy="27.46309"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3416" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3382">
+    <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="g3801"
+       style="fill:#ff0000"
+       transform="translate(28.545455,7.2743753)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3015"
+         d="m 4.1627317,12.624625 a 0.50005,0.50005 0 0 0 -0.125,0.03125 l -19.5312497,8.6875 a 0.50005,0.50005 0 0 0 -0.3125,0.46875 l 0,30.375 a 0.50005,0.50005 0 0 0 0.5,0.5 l 24.4374997,0 a 0.50005,0.50005 0 0 0 0.125,0 l 14.6562503,-4.34375 a 0.50005,0.50005 0 0 0 0.34375,-0.65625 l -4.78125,-12.6875 4.625,-4.125 a 0.50005,0.50005 0 0 0 0.1875,-0.375 l 0,-13.03125 a 0.50005,0.50005 0 0 0 -0.40625,-0.5 L 4.3502317,12.624625 a 0.50005,0.50005 0 0 0 -0.1875,0 z m 0.125,1.03125 19.00000 [...]
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:acc [...]
+      <g
+         style="fill:#ff0000;stroke:none"
+         transform="translate(-25.249389,-1.9115885)"
+         id="g3788">
+        <path
+           style="fill:#ff0000;stroke:none"
+           d="m 10.468663,35.533491 0.0011,-0.907025 1.794324,-2.002659 c 0.986878,-1.101462 1.889855,-2.103734 2.006615,-2.227273 0.11676,-0.123537 1.303124,-1.446933 2.636364,-2.940881 1.333239,-1.493946 3.981505,-4.459855 5.885035,-6.590908 l 3.460964,-3.874642 1.206454,-0.529553 c 0.663549,-0.291254 1.227768,-0.508238 1.253819,-0.482187 0.02605,0.02605 -0.480618,0.632531 -1.125929,1.347734 -0.645313,0.715203 -1.660093,1.852642 -2.255069,2.527642 -1.179948,1.338652 -4.264587,4.794291  [...]
+           id="path3001"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 10.512987,25.801348 0,-0.912497 0.676485,-0.75392 c 0.669545,-0.746185 0.68923,-0.759515 1.918868,-1.299374 0.683311,-0.3 1.286739,-0.561706 1.340952,-0.58157 0.08188,-0.03 -1.626642,1.912192 -3.496977,3.97526 l -0.439328,0.484599 0,-0.912498 z"
+           id="path3771"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 10.512987,45.247809 0,-0.892434 2.113636,-2.348424 c 2.536074,-2.817788 6.282044,-7.003613 9.033665,-10.094403 2.112387,-2.372765 5.655683,-6.330505 8.943608,-9.989702 1.687459,-1.878007 2.705109,-3.004219 4.288115,-4.745566 l 0.350492,-0.385549 0.676321,0.14861 0.676321,0.148611 -0.381988,0.428073 c -0.210094,0.23544 -1.486534,1.654496 -2.836534,3.153458 -2.580782,2.86555 -5.303298,5.904681 -12.933681,14.437801 -6.842795,7.652355 -8.898229,9.941657 -9.441696,10.515979 l  [...]
+           id="path3773"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 11.058441,53.476308 c 0,-0.02259 0.930682,-1.081981 2.068182,-2.354209 1.1375,-1.272228 2.973156,-3.329885 4.079234,-4.572569 2.474647,-2.780278 6.199907,-6.937314 9.80713,-10.943824 3.066224,-3.405627 7.067968,-7.873673 9.045454,-10.099473 1.496762,-1.68471 5.038327,-5.651833 5.823722,-6.523504 l 0.522684,-0.580102 0.600653,0.113336 c 0.330359,0.06233 0.622405,0.148531 0.648991,0.191549 0.02659,0.04302 -0.747306,0.968971 -1.719761,2.057675 -5.188416,5.808642 -11.361413,1 [...]
+           id="path3775"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 20.898547,52.176466 c 3.427101,-3.792503 7.309629,-8.12602 12.205349,-13.623109 1.55,-1.740395 3.738636,-4.187444 4.863636,-5.437886 1.125,-1.250443 2.986364,-3.320237 4.136364,-4.599541 1.15,-1.279305 2.954191,-3.285286 4.009314,-4.457737 1.055122,-1.17245 2.025421,-2.254454 2.156218,-2.404454 l 0.237813,-0.272727 0.0029,0.918764 0.0029,0.918764 -1.340909,1.485769 c -3.565476,3.950659 -7.207054,8.012391 -16.092707,17.94943 -5.271092,5.894789 -6.91632,7.729128 -8.581756,9 [...]
+           id="path3777"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 28.481159,53.403739 c 0.07303,-0.118882 2.759666,-3.13503 5.482594,-6.155036 0.877079,-0.97277 2.535598,-2.815632 3.685598,-4.095249 1.15,-1.279617 2.947148,-3.277758 3.993662,-4.440313 l 1.902753,-2.113737 0.210884,0.560962 c 0.115985,0.308529 0.210882,0.612564 0.210882,0.675634 0,0.06307 -0.439772,0.604195 -0.977272,1.202501 -0.5375,0.598307 -2.204546,2.450697 -3.704546,4.116423 -4.253858,4.72384 -7.655309,8.52319 -8.490936,9.484202 l -0.763664,0.878249 -0.809883,0 c -0 [...]
+           id="path3779"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 38.393503,52.123964 c 0.10102,-0.128427 0.779887,-0.900403 1.508592,-1.715501 3.844146,-4.2999 5.423129,-6.075823 5.788277,-6.510227 l 0.404657,-0.481407 0.252902,0.658443 c 0.213873,0.556829 0.234168,0.680332 0.131507,0.800273 -0.322277,0.376525 -5.658982,6.355315 -5.865754,6.571492 -0.164348,0.171823 -0.501959,0.327683 -1.100697,0.508144 -0.475,0.143166 -0.962529,0.292249 -1.083398,0.331294 l -0.219761,0.07099 0.183675,-0.233504 z"
+           id="path3781"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <path
+       style="fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.82368106;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 23.245105,49.356033 10.214288,9e-6 0,10.197539 8.747753,0 0,-10.197548 10.214278,0 0,-8.781223 -10.214278,0 0,-10.197548 -8.747746,0 0,10.197556 -10.214279,-8e-6 0,8.781223 z"
+       id="rect3117-7"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/oeichler/Code/cpp/MapRoom/src/icons/16x16/add.png"
+       inkscape:export-xdpi="75.913841"
+       inkscape:export-ydpi="75.913841" />
+  </g>
+</svg>
diff --git a/src/icons/AddTrk.svg b/src/icons/AddTrk.svg
new file mode 100644
index 0000000..3977714
--- /dev/null
+++ b/src/icons/AddTrk.svg
@@ -0,0 +1,192 @@
+<?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="svg3377"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="AddTrk.svg">
+  <defs
+     id="defs3379" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="-20.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="996"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3416" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3382">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3937"
+       transform="matrix(0.52701892,0,0,0.69091614,-197.06337,-41.859212)"
+       inkscape:export-filename="/home/oeichler/Code/android/QLandkarteM/QLandkarteM/icons/48x48/record.png"
+       inkscape:export-xdpi="123.42857"
+       inkscape:export-ydpi="123.42857"
+       style="fill:#ff0000">
+      <g
+         transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,70.373026,321.22792)"
+         id="g3863"
+         style="fill:#ff0000">
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           id="path3091"
+           sodipodi:cx="417"
+           sodipodi:cy="94.362183"
+           sodipodi:rx="7"
+           sodipodi:ry="7"
+           d="m 416.9824,87.362205 c 3.86598,-0.0097 7.00786,3.116398 7.01758,6.982379 0.01,3.865981 -3.1164,7.007856 -6.98238,7.017576 -0.0135,3e-5 -0.027,3e-5 -0.0405,-1e-5 L 417,94.362183 z"
+           sodipodi:start="4.7098749"
+           sodipodi:end="7.8572596"
+           transform="matrix(2.8638155,0,0,0.95340127,-777.28343,4.421604)" />
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           id="path3093"
+           sodipodi:cx="407"
+           sodipodi:cy="91.862183"
+           sodipodi:rx="4"
+           sodipodi:ry="6.5"
+           d="m 407.02766,98.362027 c -2.20909,0.02482 -4.01229,-2.865133 -4.02756,-6.454898 -0.0153,-3.589765 1.76315,-6.519968 3.97224,-6.544791 0.0143,-1.6e-4 0.0285,-1.97e-4 0.0428,-1.09e-4 L 407,91.862183 z"
+           sodipodi:start="1.5638814"
+           sodipodi:end="4.7161735"
+           transform="matrix(2.1833386,0,0,1.0380416,-476.38942,-0.97014023)" />
+      </g>
+      <g
+         transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,94.62502,319.68557)"
+         id="g3863-7"
+         style="fill:#ff0000">
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           id="path3091-3"
+           sodipodi:cx="417"
+           sodipodi:cy="94.362183"
+           sodipodi:rx="7"
+           sodipodi:ry="7"
+           d="m 416.9824,87.362205 c 3.86598,-0.0097 7.00786,3.116398 7.01758,6.982379 0.01,3.865981 -3.1164,7.007856 -6.98238,7.017576 -0.0135,3e-5 -0.027,3e-5 -0.0405,-1e-5 L 417,94.362183 z"
+           sodipodi:start="4.7098749"
+           sodipodi:end="7.8572596"
+           transform="matrix(2.8638155,0,0,0.95340127,-777.28343,4.421604)" />
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           id="path3093-5"
+           sodipodi:cx="407"
+           sodipodi:cy="91.862183"
+           sodipodi:rx="4"
+           sodipodi:ry="6.5"
+           d="m 407.02766,98.362027 c -2.20909,0.02482 -4.01229,-2.865133 -4.02756,-6.454898 -0.0153,-3.589765 1.76315,-6.519968 3.97224,-6.544791 0.0143,-1.6e-4 0.0285,-1.97e-4 0.0428,-1.09e-4 L 407,91.862183 z"
+           sodipodi:start="1.5638814"
+           sodipodi:end="4.7161735"
+           transform="matrix(2.1833386,0,0,1.0380416,-476.38942,-0.97014023)" />
+      </g>
+      <g
+         transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,69.311474,351.55812)"
+         id="g3863-8"
+         style="fill:#ff0000">
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           id="path3091-7"
+           sodipodi:cx="417"
+           sodipodi:cy="94.362183"
+           sodipodi:rx="7"
+           sodipodi:ry="7"
+           d="m 416.9824,87.362205 c 3.86598,-0.0097 7.00786,3.116398 7.01758,6.982379 0.01,3.865981 -3.1164,7.007856 -6.98238,7.017576 -0.0135,3e-5 -0.027,3e-5 -0.0405,-1e-5 L 417,94.362183 z"
+           sodipodi:start="4.7098749"
+           sodipodi:end="7.8572596"
+           transform="matrix(2.8638155,0,0,0.95340127,-777.28343,4.421604)" />
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           id="path3093-6"
+           sodipodi:cx="407"
+           sodipodi:cy="91.862183"
+           sodipodi:rx="4"
+           sodipodi:ry="6.5"
+           d="m 407.02766,98.362027 c -2.20909,0.02482 -4.01229,-2.865133 -4.02756,-6.454898 -0.0153,-3.589765 1.76315,-6.519968 3.97224,-6.544791 0.0143,-1.6e-4 0.0285,-1.97e-4 0.0428,-1.09e-4 L 407,91.862183 z"
+           sodipodi:start="1.5638814"
+           sodipodi:end="4.7161735"
+           transform="matrix(2.1833386,0,0,1.0380416,-476.38942,-0.97014023)" />
+      </g>
+      <g
+         transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,44.797353,350.17434)"
+         id="g3863-1"
+         style="fill:#ff0000">
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           id="path3091-0"
+           sodipodi:cx="417"
+           sodipodi:cy="94.362183"
+           sodipodi:rx="7"
+           sodipodi:ry="7"
+           d="m 416.9824,87.362205 c 3.86598,-0.0097 7.00786,3.116398 7.01758,6.982379 0.01,3.865981 -3.1164,7.007856 -6.98238,7.017576 -0.0135,3e-5 -0.027,3e-5 -0.0405,-1e-5 L 417,94.362183 z"
+           sodipodi:start="4.7098749"
+           sodipodi:end="7.8572596"
+           transform="matrix(2.8638155,0,0,0.95340127,-777.28343,4.421604)" />
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           id="path3093-61"
+           sodipodi:cx="407"
+           sodipodi:cy="91.862183"
+           sodipodi:rx="4"
+           sodipodi:ry="6.5"
+           d="m 407.02766,98.362027 c -2.20909,0.02482 -4.01229,-2.865133 -4.02756,-6.454898 -0.0153,-3.589765 1.76315,-6.519968 3.97224,-6.544791 0.0143,-1.6e-4 0.0285,-1.97e-4 0.0428,-1.09e-4 L 407,91.862183 z"
+           sodipodi:start="1.5638814"
+           sodipodi:end="4.7161735"
+           transform="matrix(2.1833386,0,0,1.0380416,-476.38942,-0.97014023)" />
+      </g>
+    </g>
+    <path
+       style="fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.94174314;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 17.412331,39.012396 11.673383,9e-6 0,11.664162 9.997357,0 0,-11.664171 11.673372,0 0,-10.044146 -11.673372,0 -10e-6,-11.66417 -9.997347,0 -1.1e-5,11.664179 -11.673372,-9e-6 0,10.044146 z"
+       id="rect3117-7"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/oeichler/Code/cpp/MapRoom/src/icons/16x16/add.png"
+       inkscape:export-xdpi="75.913841"
+       inkscape:export-ydpi="75.913841" />
+  </g>
+</svg>
diff --git a/src/icons/AddWpt.svg b/src/icons/AddWpt.svg
new file mode 100644
index 0000000..9d88b08
--- /dev/null
+++ b/src/icons/AddWpt.svg
@@ -0,0 +1,86 @@
+<?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="svg3513"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Add.svg">
+  <defs
+     id="defs3515" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="32"
+     inkscape:cy="32"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="996"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3518">
+    <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
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none"
+       id="rect2996"
+       width="40"
+       height="40"
+       x="10.181817"
+       y="12.909091" />
+    <g
+       id="g2992"
+       transform="translate(7.6363638,-19.818182)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3763"
+         d="m 10.447631,33.891728 25.339695,10.78737 -28.5071566,10.7873 3.1674616,-21.57467"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:1.34993112;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cccc"
+         inkscape:connector-curvature="0"
+         id="path3761"
+         d="m 3.8972165,72.422998 3.6091739,-39.39145 3.6091736,0 z"
+         style="fill:#000000;stroke:#000000;stroke-width:0.71901649px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+    </g>
+    <path
+       style="fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.82368112;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 19.066505,42.356031 10.214286,8e-6 0,10.197541 8.747755,0 0,-10.197549 10.214278,0 0,-8.781221 -10.214278,0 -8e-6,-10.197549 -8.747747,0 -8e-6,10.197557 -10.214278,-8e-6 0,8.781221 z"
+       id="rect3117-7"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/oeichler/Code/cpp/MapRoom/src/icons/16x16/add.png"
+       inkscape:export-xdpi="75.913841"
+       inkscape:export-ydpi="75.913841" />
+  </g>
+</svg>
diff --git a/src/icons/Area.svg b/src/icons/Area.svg
new file mode 100644
index 0000000..0d621ae
--- /dev/null
+++ b/src/icons/Area.svg
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3377"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Area.svg">
+  <defs
+     id="defs3379">
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Strips1_4"
+       id="pattern6173"
+       patternTransform="matrix(1.0647681,0.75352479,-4.886427,5.4556167,0.19082391,7.1447686)" />
+    <pattern
+       inkscape:stockid="Stripes 1:4"
+       id="Strips1_4"
+       patternTransform="translate(0,0) scale(10,10)"
+       height="1"
+       width="5"
+       patternUnits="userSpaceOnUse"
+       inkscape:collect="always">
+      <rect
+         id="rect4528"
+         height="2"
+         width="1"
+         y="-0.5"
+         x="0"
+         style="fill:black;stroke:none" />
+    </pattern>
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="pattern6165"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image6167"
+         height="260"
+         width="260" />
+    </pattern>
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="pattern6153"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image6155"
+         height="260"
+         width="260" />
+    </pattern>
+    <linearGradient
+       id="linearGradient6147"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop6149" />
+    </linearGradient>
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="pattern6139"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image6141"
+         height="260"
+         width="260" />
+    </pattern>
+    <linearGradient
+       id="linearGradient6133"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000080;stop-opacity:1;"
+         offset="0"
+         id="stop6135" />
+    </linearGradient>
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="pattern5660"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image5662"
+         height="260"
+         width="260" />
+    </pattern>
+    <pattern
+       inkscape:stockid="Sand (bitmap)"
+       id="sand_bitmap"
+       height="256"
+       width="256"
+       patternUnits="userSpaceOnUse">
+      <!-- Seamless texture provided by FreeSeamlessTextures.com -->
+      <!-- License: creative commons attribution -->
+      <image
+         xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQIAIwAjAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAEEAQQDASIA AhEBAxEB/8QAHQAAAgIDAQEBAAAAAAAAAAAABgcFCAADBAkBAv/EAEIQAAICAAUDBAECBAQFAwEI AwUGBAcBAwgVFgAXJQIRFCYnITUYJDZFEzE3RgkSQVVWKFF1ZTQ4R1dhZmd2hYaV/8QAGQEAAgMB AAAAAAAAAAAAAAAAAgMAAQQF/8QAOxEAAgIBAwMDBAEBBgUDBQEAAQIDERIEEyE [...]
+         y="0"
+         x="0"
+         id="image9"
+         height="260"
+         width="260" />
+    </pattern>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11"
+     inkscape:cx="4.0115391"
+     inkscape:cy="27.46309"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3416" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3382">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3801"
+       style="fill:#000000"
+       transform="translate(28.545455,-4.7272727)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3015"
+         d="m 4.1627317,12.624625 a 0.50005,0.50005 0 0 0 -0.125,0.03125 l -19.5312497,8.6875 a 0.50005,0.50005 0 0 0 -0.3125,0.46875 l 0,30.375 a 0.50005,0.50005 0 0 0 0.5,0.5 l 24.4374997,0 a 0.50005,0.50005 0 0 0 0.125,0 l 14.6562503,-4.34375 a 0.50005,0.50005 0 0 0 0.34375,-0.65625 l -4.78125,-12.6875 4.625,-4.125 a 0.50005,0.50005 0 0 0 0.1875,-0.375 l 0,-13.03125 a 0.50005,0.50005 0 0 0 -0.40625,-0.5 L 4.3502317,12.624625 a 0.50005,0.50005 0 0 0 -0.1875,0 z m 0.125,1.03125 19.00000 [...]
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:acc [...]
+      <g
+         style="fill:#000000;stroke:none"
+         transform="translate(-25.249389,-1.9115885)"
+         id="g3788">
+        <path
+           style="fill:#000000;stroke:none"
+           d="m 10.468663,35.533491 0.0011,-0.907025 1.794324,-2.002659 c 0.986878,-1.101462 1.889855,-2.103734 2.006615,-2.227273 0.11676,-0.123537 1.303124,-1.446933 2.636364,-2.940881 1.333239,-1.493946 3.981505,-4.459855 5.885035,-6.590908 l 3.460964,-3.874642 1.206454,-0.529553 c 0.663549,-0.291254 1.227768,-0.508238 1.253819,-0.482187 0.02605,0.02605 -0.480618,0.632531 -1.125929,1.347734 -0.645313,0.715203 -1.660093,1.852642 -2.255069,2.527642 -1.179948,1.338652 -4.264587,4.794291  [...]
+           id="path3001"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           d="m 10.512987,25.801348 0,-0.912497 0.676485,-0.75392 c 0.669545,-0.746185 0.68923,-0.759515 1.918868,-1.299374 0.683311,-0.3 1.286739,-0.561706 1.340952,-0.58157 0.08188,-0.03 -1.626642,1.912192 -3.496977,3.97526 l -0.439328,0.484599 0,-0.912498 z"
+           id="path3771"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           d="m 10.512987,45.247809 0,-0.892434 2.113636,-2.348424 c 2.536074,-2.817788 6.282044,-7.003613 9.033665,-10.094403 2.112387,-2.372765 5.655683,-6.330505 8.943608,-9.989702 1.687459,-1.878007 2.705109,-3.004219 4.288115,-4.745566 l 0.350492,-0.385549 0.676321,0.14861 0.676321,0.148611 -0.381988,0.428073 c -0.210094,0.23544 -1.486534,1.654496 -2.836534,3.153458 -2.580782,2.86555 -5.303298,5.904681 -12.933681,14.437801 -6.842795,7.652355 -8.898229,9.941657 -9.441696,10.515979 l  [...]
+           id="path3773"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           d="m 11.058441,53.476308 c 0,-0.02259 0.930682,-1.081981 2.068182,-2.354209 1.1375,-1.272228 2.973156,-3.329885 4.079234,-4.572569 2.474647,-2.780278 6.199907,-6.937314 9.80713,-10.943824 3.066224,-3.405627 7.067968,-7.873673 9.045454,-10.099473 1.496762,-1.68471 5.038327,-5.651833 5.823722,-6.523504 l 0.522684,-0.580102 0.600653,0.113336 c 0.330359,0.06233 0.622405,0.148531 0.648991,0.191549 0.02659,0.04302 -0.747306,0.968971 -1.719761,2.057675 -5.188416,5.808642 -11.361413,1 [...]
+           id="path3775"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           d="m 20.898547,52.176466 c 3.427101,-3.792503 7.309629,-8.12602 12.205349,-13.623109 1.55,-1.740395 3.738636,-4.187444 4.863636,-5.437886 1.125,-1.250443 2.986364,-3.320237 4.136364,-4.599541 1.15,-1.279305 2.954191,-3.285286 4.009314,-4.457737 1.055122,-1.17245 2.025421,-2.254454 2.156218,-2.404454 l 0.237813,-0.272727 0.0029,0.918764 0.0029,0.918764 -1.340909,1.485769 c -3.565476,3.950659 -7.207054,8.012391 -16.092707,17.94943 -5.271092,5.894789 -6.91632,7.729128 -8.581756,9 [...]
+           id="path3777"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           d="m 28.481159,53.403739 c 0.07303,-0.118882 2.759666,-3.13503 5.482594,-6.155036 0.877079,-0.97277 2.535598,-2.815632 3.685598,-4.095249 1.15,-1.279617 2.947148,-3.277758 3.993662,-4.440313 l 1.902753,-2.113737 0.210884,0.560962 c 0.115985,0.308529 0.210882,0.612564 0.210882,0.675634 0,0.06307 -0.439772,0.604195 -0.977272,1.202501 -0.5375,0.598307 -2.204546,2.450697 -3.704546,4.116423 -4.253858,4.72384 -7.655309,8.52319 -8.490936,9.484202 l -0.763664,0.878249 -0.809883,0 c -0 [...]
+           id="path3779"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#000000;fill-opacity:1;stroke:none"
+           d="m 38.393503,52.123964 c 0.10102,-0.128427 0.779887,-0.900403 1.508592,-1.715501 3.844146,-4.2999 5.423129,-6.075823 5.788277,-6.510227 l 0.404657,-0.481407 0.252902,0.658443 c 0.213873,0.556829 0.234168,0.680332 0.131507,0.800273 -0.322277,0.376525 -5.658982,6.355315 -5.865754,6.571492 -0.164348,0.171823 -0.501959,0.327683 -1.100697,0.508144 -0.475,0.143166 -0.962529,0.292249 -1.083398,0.331294 l -0.219761,0.07099 0.183675,-0.233504 z"
+           id="path3781"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/src/icons/AreaMove.svg b/src/icons/AreaMove.svg
new file mode 100644
index 0000000..23256d5
--- /dev/null
+++ b/src/icons/AreaMove.svg
@@ -0,0 +1,216 @@
+<?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="svg3513"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="AreaMove.svg">
+  <defs
+     id="defs3515">
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3901"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;">
+      <path
+         id="path3895"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path3880"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3874"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-0"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3880-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="-43.882818"
+     inkscape:cy="32"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3090" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3518">
+    <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="g3801"
+       style="fill:#ff0000"
+       transform="translate(29.531937,-3.0869181)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3015"
+         d="m 4.1627317,12.624625 a 0.50005,0.50005 0 0 0 -0.125,0.03125 l -19.5312497,8.6875 a 0.50005,0.50005 0 0 0 -0.3125,0.46875 l 0,30.375 a 0.50005,0.50005 0 0 0 0.5,0.5 l 24.4374997,0 a 0.50005,0.50005 0 0 0 0.125,0 l 14.6562503,-4.34375 a 0.50005,0.50005 0 0 0 0.34375,-0.65625 l -4.78125,-12.6875 4.625,-4.125 a 0.50005,0.50005 0 0 0 0.1875,-0.375 l 0,-13.03125 a 0.50005,0.50005 0 0 0 -0.40625,-0.5 L 4.3502317,12.624625 a 0.50005,0.50005 0 0 0 -0.1875,0 z m 0.125,1.03125 19.00000 [...]
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:acc [...]
+      <g
+         style="fill:#ff0000;stroke:none"
+         transform="translate(-25.249389,-1.9115885)"
+         id="g3788">
+        <path
+           style="fill:#ff0000;stroke:none"
+           d="m 10.468663,35.533491 0.0011,-0.907025 1.794324,-2.002659 c 0.986878,-1.101462 1.889855,-2.103734 2.006615,-2.227273 0.11676,-0.123537 1.303124,-1.446933 2.636364,-2.940881 1.333239,-1.493946 3.981505,-4.459855 5.885035,-6.590908 l 3.460964,-3.874642 1.206454,-0.529553 c 0.663549,-0.291254 1.227768,-0.508238 1.253819,-0.482187 0.02605,0.02605 -0.480618,0.632531 -1.125929,1.347734 -0.645313,0.715203 -1.660093,1.852642 -2.255069,2.527642 -1.179948,1.338652 -4.264587,4.794291  [...]
+           id="path3001"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 10.512987,25.801348 0,-0.912497 0.676485,-0.75392 c 0.669545,-0.746185 0.68923,-0.759515 1.918868,-1.299374 0.683311,-0.3 1.286739,-0.561706 1.340952,-0.58157 0.08188,-0.03 -1.626642,1.912192 -3.496977,3.97526 l -0.439328,0.484599 0,-0.912498 z"
+           id="path3771"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 10.512987,45.247809 0,-0.892434 2.113636,-2.348424 c 2.536074,-2.817788 6.282044,-7.003613 9.033665,-10.094403 2.112387,-2.372765 5.655683,-6.330505 8.943608,-9.989702 1.687459,-1.878007 2.705109,-3.004219 4.288115,-4.745566 l 0.350492,-0.385549 0.676321,0.14861 0.676321,0.148611 -0.381988,0.428073 c -0.210094,0.23544 -1.486534,1.654496 -2.836534,3.153458 -2.580782,2.86555 -5.303298,5.904681 -12.933681,14.437801 -6.842795,7.652355 -8.898229,9.941657 -9.441696,10.515979 l  [...]
+           id="path3773"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 11.058441,53.476308 c 0,-0.02259 0.930682,-1.081981 2.068182,-2.354209 1.1375,-1.272228 2.973156,-3.329885 4.079234,-4.572569 2.474647,-2.780278 6.199907,-6.937314 9.80713,-10.943824 3.066224,-3.405627 7.067968,-7.873673 9.045454,-10.099473 1.496762,-1.68471 5.038327,-5.651833 5.823722,-6.523504 l 0.522684,-0.580102 0.600653,0.113336 c 0.330359,0.06233 0.622405,0.148531 0.648991,0.191549 0.02659,0.04302 -0.747306,0.968971 -1.719761,2.057675 -5.188416,5.808642 -11.361413,1 [...]
+           id="path3775"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 20.898547,52.176466 c 3.427101,-3.792503 7.309629,-8.12602 12.205349,-13.623109 1.55,-1.740395 3.738636,-4.187444 4.863636,-5.437886 1.125,-1.250443 2.986364,-3.320237 4.136364,-4.599541 1.15,-1.279305 2.954191,-3.285286 4.009314,-4.457737 1.055122,-1.17245 2.025421,-2.254454 2.156218,-2.404454 l 0.237813,-0.272727 0.0029,0.918764 0.0029,0.918764 -1.340909,1.485769 c -3.565476,3.950659 -7.207054,8.012391 -16.092707,17.94943 -5.271092,5.894789 -6.91632,7.729128 -8.581756,9 [...]
+           id="path3777"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 28.481159,53.403739 c 0.07303,-0.118882 2.759666,-3.13503 5.482594,-6.155036 0.877079,-0.97277 2.535598,-2.815632 3.685598,-4.095249 1.15,-1.279617 2.947148,-3.277758 3.993662,-4.440313 l 1.902753,-2.113737 0.210884,0.560962 c 0.115985,0.308529 0.210882,0.612564 0.210882,0.675634 0,0.06307 -0.439772,0.604195 -0.977272,1.202501 -0.5375,0.598307 -2.204546,2.450697 -3.704546,4.116423 -4.253858,4.72384 -7.655309,8.52319 -8.490936,9.484202 l -0.763664,0.878249 -0.809883,0 c -0 [...]
+           id="path3779"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#ff0000;fill-opacity:1;stroke:none"
+           d="m 38.393503,52.123964 c 0.10102,-0.128427 0.779887,-0.900403 1.508592,-1.715501 3.844146,-4.2999 5.423129,-6.075823 5.788277,-6.510227 l 0.404657,-0.481407 0.252902,0.658443 c 0.213873,0.556829 0.234168,0.680332 0.131507,0.800273 -0.322277,0.376525 -5.658982,6.355315 -5.865754,6.571492 -0.164348,0.171823 -0.501959,0.327683 -1.100697,0.508144 -0.475,0.143166 -0.962529,0.292249 -1.083398,0.331294 l -0.219761,0.07099 0.183675,-0.233504 z"
+           id="path3781"
+           inkscape:connector-curvature="0" />
+      </g>
+    </g>
+    <g
+       id="g3168"
+       transform="translate(0.50369882,-0.58708886)">
+      <rect
+         y="10.153573"
+         x="13.269119"
+         height="40"
+         width="40"
+         id="rect5814"
+         style="fill:none;stroke:none" />
+      <path
+         sodipodi:nodetypes="cc"
+         inkscape:connector-curvature="0"
+         id="path3096"
+         d="m 33.269119,30.328819 -18.790668,-5"
+         style="fill:none;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Mend)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3098"
+         d="m 33.269119,30.328819 18.790669,5"
+         style="fill:none;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3100"
+         d="m 23.873785,45.328819 9.395334,-15"
+         style="fill:#000080;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3100-4"
+         d="m 42.707469,14.978327 -9.395334,15"
+         style="fill:#000080;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)" />
+      <rect
+         y="10.153573"
+         x="13.269119"
+         height="40"
+         width="40"
+         id="rect4025"
+         style="fill:none;stroke:none" />
+    </g>
+  </g>
+</svg>
diff --git a/src/icons/LineMove.svg b/src/icons/LineMove.svg
new file mode 100644
index 0000000..399897f
--- /dev/null
+++ b/src/icons/LineMove.svg
@@ -0,0 +1,168 @@
+<?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="svg3513"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="LineMove.svg">
+  <defs
+     id="defs3515">
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3901"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;">
+      <path
+         id="path3895"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path3880"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3874"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-0"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3880-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="-74.181819"
+     inkscape:cy="32"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="996"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3090" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3518">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:none;stroke:none"
+       id="rect5814"
+       width="40"
+       height="40"
+       x="13.269119"
+       y="10.153573" />
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 15.00361,16.820551 c 0,0 11.409595,1.141662 14.999999,5 3.089204,3.319735 3.363636,8.181818 3.363636,8.181818 0,0 3.618001,6.715089 6.636364,8.818182 2.855342,1.989506 10,3 10,3"
+       id="path4023"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cscsc" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Mend)"
+       d="m 33.269119,30.328819 -18.790668,-5"
+       id="path3096"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
+       d="m 33.269119,30.328819 18.790669,5"
+       id="path3098"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)"
+       d="m 23.873785,45.328819 9.395334,-15"
+       id="path3100"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)"
+       d="m 42.707469,14.978327 -9.395334,15"
+       id="path3100-4"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:none;stroke:none"
+       id="rect4025"
+       width="40"
+       height="40"
+       x="13.269119"
+       y="10.153573" />
+  </g>
+</svg>
diff --git a/src/icons/MimeWMTS.svg b/src/icons/MimeWMTS.svg
new file mode 100644
index 0000000..65a903d
--- /dev/null
+++ b/src/icons/MimeWMTS.svg
@@ -0,0 +1,98 @@
+<?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="svg3462"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="MimeWMTS.svg">
+  <defs
+     id="defs3464" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11"
+     inkscape:cx="18.94319"
+     inkscape:cy="32.466178"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3017" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3467">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3034">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3319"
+         d="m 20.698811,41.088148 c -0.37071,-0.152412 -0.77584,-0.328663 -0.90027,-0.391681 -0.22434,-0.113598 -0.22521,-0.115284 -0.1037,-0.198356 0.0674,-0.04608 0.17632,-0.08477 0.24202,-0.08608 0.0657,-9.37e-4 0.32235,-0.06997 0.57033,-0.15261 0.7605,-0.25358 1.15015,-0.299589 2.03222,-0.239952 0.44199,0.02988 0.83863,0.07203 0.88141,0.0938 0.0427,0.02173 0.11184,0.01264 0.15348,-0.01976 0.0648,-0.05086 0.0615,-0.07868 -0.0221,-0.192586 l -0.0978,-0.133248 0.38503,0.04693 c 0.66965, [...]
+         style="fill:#00d4aa" />
+      <g
+         transform="translate(7.9263592,-19.951782)"
+         id="g3029">
+        <rect
+           style="fill:#ffffff;stroke:none"
+           id="rect3019"
+           width="31"
+           height="7"
+           x="9.6645508"
+           y="57.175659" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#00d4aa;fill-opacity:1;stroke:none;font-family:Sans"
+           x="9.6035156"
+           y="63.951782"
+           id="text3207"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3209"
+             x="9.6035156"
+             y="63.951782"
+             style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#00d4aa;font-family:Sans;-inkscape-font-specification:Sans Bold">WMTS</tspan></text>
+      </g>
+      <rect
+         y="12.314795"
+         x="16.525911"
+         height="33.188591"
+         width="33.129997"
+         id="rect3167"
+         style="fill:none;stroke:#217867;stroke-width:1.87165701000000007;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/src/icons/PointMove.svg b/src/icons/PointMove.svg
new file mode 100644
index 0000000..e711524
--- /dev/null
+++ b/src/icons/PointMove.svg
@@ -0,0 +1,162 @@
+<?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="svg3513"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="PointMove.svg">
+  <defs
+     id="defs3515">
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3901"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;">
+      <path
+         id="path3895"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path3880"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3874"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-0"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3880-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="-74.181819"
+     inkscape:cy="32"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="996"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3090" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3518">
+    <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
+       style="fill:none;stroke:none"
+       id="rect5814"
+       width="40"
+       height="40"
+       x="13.269119"
+       y="10.153573" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Mend)"
+       d="m 33.269119,30.328819 -18.790668,-5"
+       id="path3096"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
+       d="m 33.269119,30.328819 18.790669,5"
+       id="path3098"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)"
+       d="m 23.873785,45.328819 9.395334,-15"
+       id="path3100"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:#000080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Mstart)"
+       d="m 42.707469,14.978327 -9.395334,15"
+       id="path3100-4"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:none;stroke:none"
+       id="rect4025"
+       width="40"
+       height="40"
+       x="13.269119"
+       y="10.153573" />
+  </g>
+</svg>
diff --git a/src/icons/SelectRange.svg b/src/icons/SelectRange.svg
new file mode 100644
index 0000000..f1e86fa
--- /dev/null
+++ b/src/icons/SelectRange.svg
@@ -0,0 +1,148 @@
+<?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="svg3513"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="SelectRange.svg">
+  <defs
+     id="defs3515">
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3901"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;">
+      <path
+         id="path3895"
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path3880"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3874"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart-0"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3880-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.4,0,0,0.4,4,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11"
+     inkscape:cx="46.804178"
+     inkscape:cy="23.220932"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3090" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3518">
+    <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">
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 5,49 52,0"
+       id="path4223"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 11,9 0,50"
+       id="path3002"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 51,9.0909092 51,59.09091"
+       id="path3002-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
+       d="m 11,34 34,0"
+       id="path3024"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/src/icons/Tainted.svg b/src/icons/Tainted.svg
index 5dc6fc7..8b9edd4 100644
--- a/src/icons/Tainted.svg
+++ b/src/icons/Tainted.svg
@@ -79,7 +79,7 @@
      inkscape:pageshadow="2"
      inkscape:zoom="11"
      inkscape:cx="-5.2788078"
-     inkscape:cy="39.970484"
+     inkscape:cy="21.702264"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:document-units="px"
@@ -101,7 +101,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
+        <dc:title />
       </cc:Work>
     </rdf:RDF>
   </metadata>
@@ -111,13 +111,13 @@
      inkscape:groupmode="layer">
     <g
        id="g3118"
-       transform="translate(20,-0.81818182)"
+       transform="matrix(1,0,0,0.96667359,20,0.84905153)"
        style="fill:#000080">
       <path
-         sodipodi:nodetypes="cssscssscssscssscssscssscssscsssc"
+         sodipodi:nodetypes="cssscssscssscszscssscssscssscsssc"
          inkscape:connector-curvature="0"
          id="path3021"
-         d="m 24.642907,39.416541 c 0,0 -2.951553,-3.345513 -4.326996,-1.508852 -1.375444,1.83666 5.930895,5.15156 3.057934,8.83938 -1.903592,2.443509 -4.80372,-7.551782 -6.664504,-6.560116 -1.860783,0.991665 -1.709246,3.83161 -2.218928,4.93111 -0.124849,-1.0995 1.08508,-3.878416 -0.93208,-3.937855 -2.01716,-0.05943 -0.918631,9.36436 -2.875105,8.824873 C 8.7267534,49.465594 11.431156,41.323185 9.5699149,40.432374 7.708674,39.541563 8.1451044,40.231044 7.0552703,41.107446 7.5105735,39.416 [...]
+         d="m 24.642907,39.416541 c 0,0 -2.951553,-3.345513 -4.326996,-1.508852 -1.375444,1.83666 5.930895,5.15156 3.057934,8.83938 -1.903592,2.443509 -4.80372,-7.551782 -6.664504,-6.560116 -1.860783,0.991665 -1.709246,3.83161 -2.218928,4.93111 -0.124849,-1.0995 1.08508,-3.878416 -0.93208,-3.937855 -2.01716,-0.05943 -0.918631,9.36436 -2.875105,8.824873 C 8.7267534,49.465594 11.431156,41.323185 9.5699149,40.432374 7.708674,39.541563 8.1451044,40.231044 7.0552703,41.107446 7.5105735,39.416 [...]
          inkscape:transform-center-y="-0.18557266"
          inkscape:transform-center-x="-0.00065841208"
          style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:none" />
diff --git a/src/icons/TrkCut.svg b/src/icons/TrkCut.svg
new file mode 100644
index 0000000..b0527ab
--- /dev/null
+++ b/src/icons/TrkCut.svg
@@ -0,0 +1,121 @@
+<?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="svg3513"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="TrkCut.svg">
+  <defs
+     id="defs3515" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11"
+     inkscape:cx="24.10128"
+     inkscape:cy="28.929652"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2983" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3518">
+    <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="g3001">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2985"
+         d="m 48.285576,24.40139 -30.736638,8.967061 -0.343853,0.457309 c -0.04796,-1.063446 -0.411167,-2.069616 -1.128146,-2.864592 -1.842522,-2.042962 -5.276216,-1.914421 -7.6501844,0.289419 -2.3739688,2.203842 -2.8092554,5.66263 -0.9667339,7.705592 1.5490849,1.717603 4.2278933,1.878592 6.4475433,0.583105 9.299929,-3.538742 28.831755,-3.608759 34.378012,-15.137894 z"
+         style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.76884818;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         transform="matrix(0.5008634,0.5008634,-0.5901085,0.5901085,26.33056,-1.4490496)"
+         sodipodi:open="true"
+         sodipodi:end="12.08609"
+         sodipodi:start="5.8033439"
+         d="m 25.548273,41.153446 a 4,4 0 1 1 -8.12e-4,-0.0016"
+         sodipodi:ry="4"
+         sodipodi:rx="4"
+         sodipodi:cy="43"
+         sodipodi:cx="22"
+         id="path3780"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+    </g>
+    <path
+       style="fill:none;stroke:#ff0000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 8,11 32,3 -9,8 16,11"
+       id="path2989"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+    <g
+       id="g2996">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2985-4"
+         d="m 32.341998,8.457812 -8.967061,30.736638 -0.457309,0.343853 c 1.063446,0.04796 2.069617,0.411167 2.864593,1.128146 2.042962,1.842522 1.914421,5.276217 -0.28942,7.650185 -2.203841,2.373969 -5.662629,2.809255 -7.705592,0.966734 -1.717603,-1.549085 -1.878592,-4.227894 -0.583105,-6.447544 3.538742,-9.299929 3.608759,-28.831755 15.137894,-34.378012 z"
+         style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.76884818;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         transform="matrix(0.5008634,0.5008634,-0.5901085,0.5901085,36.195003,8.6299777)"
+         sodipodi:open="true"
+         sodipodi:end="12.08609"
+         sodipodi:start="5.8033439"
+         d="m 25.548273,41.153446 a 4,4 0 1 1 -8.12e-4,-0.0016"
+         sodipodi:ry="4"
+         sodipodi:rx="4"
+         sodipodi:cy="43"
+         sodipodi:cx="22"
+         id="path3780-5"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(0.5008634,0.5008634,-0.5901085,0.5901085,25.753532,-0.41669106)"
+         sodipodi:open="true"
+         sodipodi:end="12.08609"
+         sodipodi:start="5.8033439"
+         d="m 31.887068,31.538362 a 1,1 0 1 1 -2.03e-4,-3.9e-4"
+         sodipodi:ry="1"
+         sodipodi:rx="1"
+         sodipodi:cy="32"
+         sodipodi:cx="31"
+         id="path3800"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+    </g>
+  </g>
+</svg>
diff --git a/src/icons/TrkProfile.svg b/src/icons/TrkProfile.svg
new file mode 100644
index 0000000..4bfd9f2
--- /dev/null
+++ b/src/icons/TrkProfile.svg
@@ -0,0 +1,99 @@
+<?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="svg2985"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="TrkProfile.svg">
+  <defs
+     id="defs2987" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="15.556349"
+     inkscape:cx="11.602914"
+     inkscape:cy="32.047054"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1"
+     gridtolerance="10">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3019"
+       units="mm"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2990">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <rect
+       style="fill:#ffffff;stroke:none"
+       id="rect3797"
+       width="40"
+       height="40"
+       x="1.0708065"
+       y="10.600393" />
+    <path
+       style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 37,13 -33,0 0,13 11,0 6,8 -1,-8 16.970563,0.100046 z"
+       id="path4482"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 6.952197,16.007245 27.166217,0"
+       id="path4484"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 6.952197,19.007245 27.166217,0"
+       id="path4486"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 6.952197,22.007245 27.166217,0"
+       id="path4488"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:none;stroke-width:0.49691930000000001;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 1.3192662,50.351934 0,-7.34353 4.9378843,0 4.9378855,-7.343528 4.937887,7.343528 9.875769,-14.687058 9.875771,7.34353 4.937884,7.343528 0,7.34353 z"
+       id="path3815"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/src/icons/makeicons b/src/icons/makeicons
index 66d4f3f..3f1bc87 100755
--- a/src/icons/makeicons
+++ b/src/icons/makeicons
@@ -1,5 +1,4 @@
 #!/bin/bash
 
-for i in *.svg; do inkscape -D -w 16 -h 16 $i --export-png=16x16/`echo $i | sed -e 's/svg$/png/'`; done
 for i in *.svg; do inkscape -D -w 32 -h 32 $i --export-png=32x32/`echo $i | sed -e 's/svg$/png/'`; done
 for i in *.svg; do inkscape -D -w 48 -h 48 $i --export-png=48x48/`echo $i | sed -e 's/svg$/png/'`; done
diff --git a/src/icons/waypoints/32x32/Waypoint.png b/src/icons/waypoints/32x32/Waypoint.png
new file mode 100644
index 0000000..dfed9aa
Binary files /dev/null and b/src/icons/waypoints/32x32/Waypoint.png differ
diff --git a/src/icons/waypoints/Waypoint.svg b/src/icons/waypoints/Waypoint.svg
new file mode 100644
index 0000000..8c38d5c
--- /dev/null
+++ b/src/icons/waypoints/Waypoint.svg
@@ -0,0 +1,101 @@
+<?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="16"
+   height="16"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Waypoint.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="22.4"
+     inkscape:cx="5.4102698"
+     inkscape:cy="8.1648919"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1920"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <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
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1036.3622)">
+    <g
+       id="g3804"
+       transform="translate(-10,-4.0000185)">
+      <path
+         sodipodi:open="true"
+         sodipodi:end="12.08609"
+         sodipodi:start="5.8033439"
+         transform="translate(0,1036.3622)"
+         d="M 9.7741363,7.076723 C 10.284048,8.0565514 9.9031054,9.2642245 8.923277,9.7741363 7.9434486,10.284048 6.7357755,9.9031054 6.2258637,8.923277 5.7159519,7.9434486 6.0968946,6.7357755 7.076723,6.2258637 8.0562471,5.7161103 9.263547,6.0966437 9.7737306,7.0759439"
+         sodipodi:ry="2"
+         sodipodi:rx="2"
+         sodipodi:cy="8"
+         sodipodi:cx="8"
+         id="path3798"
+         style="fill:#000080;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:open="true"
+         sodipodi:end="12.08609"
+         sodipodi:start="5.8033439"
+         transform="translate(0,1036.3622)"
+         d="M 12.435341,5.6918075 C 13.71012,8.1413786 12.757764,11.160561 10.308192,12.435341 7.8586214,13.71012 4.8394388,12.757764 3.5646593,10.308192 2.2898798,7.8586214 3.2422365,4.8394388 5.6918075,3.5646593 8.1406178,2.2902756 11.158867,3.2416093 12.434327,5.6898597"
+         sodipodi:ry="5"
+         sodipodi:rx="5"
+         sodipodi:cy="8"
+         sodipodi:cx="8"
+         id="path3800"
+         style="fill:none;stroke:#000080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+    </g>
+    <rect
+       style="fill:none;stroke:none"
+       id="rect3802"
+       width="32"
+       height="32"
+       x="-18"
+       y="1024.3622" />
+  </g>
+</svg>
diff --git a/src/locale/qmapshack_cs.ts b/src/locale/qmapshack_cs.ts
index c4b8d1e..88fbf94 100644
--- a/src/locale/qmapshack_cs.ts
+++ b/src/locale/qmapshack_cs.ts
@@ -4,9 +4,9 @@
 <context>
     <name>CCanvas</name>
     <message>
-        <location filename="../canvas/CCanvas.cpp" line="51"/>
+        <location filename="../canvas/CCanvas.cpp" line="58"/>
         <source>Workspace %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Pracovní oblast %1</translation>
     </message>
 </context>
 <context>
@@ -14,12 +14,12 @@
     <message>
         <location filename="../dem/CDemList.cpp" line="143"/>
         <source>Deactivate</source>
-        <translation type="unfinished"></translation>
+        <translation>Vypnout</translation>
     </message>
     <message>
         <location filename="../dem/CDemList.cpp" line="143"/>
         <source>Activate</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapnout</translation>
     </message>
 </context>
 <context>
@@ -27,12 +27,12 @@
     <message>
         <location filename="../dem/CDemPathSetup.cpp" line="39"/>
         <source>Add or remove paths containing DEM data. There can be multiple files in a path but no sub-path is parsed. Supported formats are: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidat nebo odstranit cesty obsahující data DEM. V cestě může být více souborů, ale žádná podcesta není zpracována. Podporovanými formáty jsou: %1</translation>
     </message>
     <message>
         <location filename="../dem/CDemPathSetup.cpp" line="55"/>
         <source>Select DEM file path...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vybrat cestu k souboru DEM...</translation>
     </message>
 </context>
 <context>
@@ -43,23 +43,23 @@
         <location filename="../dem/CDemVRT.cpp" line="60"/>
         <location filename="../dem/CDemVRT.cpp" line="84"/>
         <source>Error...</source>
-        <translation type="unfinished"></translation>
+        <translation>Chyba...</translation>
     </message>
     <message>
         <location filename="../dem/CDemVRT.cpp" line="44"/>
         <source>Failed to load file: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se nahrát soubor %1</translation>
     </message>
     <message>
         <location filename="../dem/CDemVRT.cpp" line="51"/>
         <location filename="../dem/CDemVRT.cpp" line="60"/>
         <source>DEM must have one band with 16bit or 32bit data.</source>
-        <translation type="unfinished"></translation>
+        <translation>DEM musí mít jedno pásmo s 16bitovými nebo 32bitovými daty.</translation>
     </message>
     <message>
         <location filename="../dem/CDemVRT.cpp" line="84"/>
         <source>No georeference information found.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nenalezeny žádné údaje o vyjádření prostorových vztahů.</translation>
     </message>
 </context>
 <context>
@@ -67,84 +67,150 @@
     <message>
         <location filename="../gis/wpt/CDetailsGeoCache.cpp" line="58"/>
         <source>none</source>
-        <translation type="unfinished"></translation>
+        <translation>žádné</translation>
     </message>
     <message>
         <location filename="../gis/wpt/CDetailsGeoCache.cpp" line="58"/>
         <location filename="../gis/wpt/CDetailsGeoCache.cpp" line="101"/>
         <source>???</source>
+        <translation>???</translation>
+    </message>
+</context>
+<context>
+    <name>CDetailsOvlArea</name>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <source>Edit name...</source>
+        <translation type="unfinished">Upravit název...</translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <source>Enter new waypoint name.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="222"/>
+        <source><h4>Comment:</h4></source>
+        <translation type="unfinished"><h4>Poznámka:</h4></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="225"/>
+        <source><p>--- no comment ---</p></source>
+        <translation type="unfinished"><p>--- žádná poznámka ---</p></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="232"/>
+        <source><h4>Description:</h4></source>
+        <translation type="unfinished"><h4>Popis:</h4></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="235"/>
+        <source><p>--- no description ---</p></source>
+        <translation type="unfinished"><p>--- žádný popis ---</p></translation>
+    </message>
+</context>
+<context>
+    <name>CDetailsTrk</name>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="145"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="154"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="157"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="163"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="182"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="184"/>
+        <source>%1 %2</source>
+        <translation>%1 %2</translation>
+    </message>
 </context>
 <context>
     <name>CDetailsWpt</name>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="115"/>
-        <source>no comment</source>
-        <translation type="unfinished"></translation>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="120"/>
+        <source><h4>Comment:</h4></source>
+        <translation><h4>Poznámka:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="126"/>
-        <source>no description</source>
-        <translation type="unfinished"></translation>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="123"/>
+        <source><p>--- no comment ---</p></source>
+        <translation><p>--- žádná poznámka ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="167"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="130"/>
+        <source><h4>Description:</h4></source>
+        <translation><h4>Popis:</h4></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="133"/>
+        <source><p>--- no description ---</p></source>
+        <translation><p>--- žádný popis ---</p></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
         <source>Edit name...</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravit název...</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="167"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
         <source>Enter new waypoint name.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zadat nový cestovní bod.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="177"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="176"/>
         <source>Enter new elevation.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zadat novou výšku.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="186"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="185"/>
         <source>Enter new proximity range.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zadat nový rozsah blízkosti.</translation>
     </message>
 </context>
 <context>
     <name>CGisListWks</name>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="33"/>
+        <location filename="../gis/CGisListWks.cpp" line="36"/>
         <source>Save As...</source>
-        <translation type="unfinished"></translation>
+        <translation>Uložit jako...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="34"/>
+        <location filename="../gis/CGisListWks.cpp" line="37"/>
         <source>Save</source>
-        <translation type="unfinished"></translation>
+        <translation>Uložit</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="35"/>
+        <location filename="../gis/CGisListWks.cpp" line="38"/>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Zavřít</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="41"/>
+        <location filename="../gis/CGisListWks.cpp" line="44"/>
         <source>Edit...</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravit...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="42"/>
-        <source>Move Waypoint...</source>
-        <translation type="unfinished"></translation>
+        <location filename="../gis/CGisListWks.cpp" line="45"/>
+        <source>Move Waypoint</source>
+        <translation>Přesunout cestovní bod</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="43"/>
+        <location filename="../gis/CGisListWks.cpp" line="46"/>
         <source>Proj. Waypoint...</source>
+        <translation>Promítnout cestovní bod</translation>
+    </message>
+    <message>
+        <location filename="../gis/CGisListWks.cpp" line="47"/>
+        <source>Track Profile</source>
+        <translation>Sledovat profil</translation>
+    </message>
+    <message>
+        <location filename="../gis/CGisListWks.cpp" line="48"/>
+        <source>Edit Track Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="44"/>
+        <location filename="../gis/CGisListWks.cpp" line="51"/>
         <source>Delete</source>
-        <translation type="unfinished"></translation>
+        <translation>Smazat</translation>
     </message>
 </context>
 <context>
@@ -152,25 +218,25 @@
     <message>
         <location filename="../grid/CGrid.cpp" line="61"/>
         <source>[Grid: %1] </source>
-        <translation type="unfinished"></translation>
+        <translation>[Mřížka: %1]</translation>
     </message>
     <message>
         <location filename="../grid/CGrid.cpp" line="65"/>
         <source>[Grid: N %1m, E %2m] </source>
-        <translation type="unfinished"></translation>
+        <translation>[Mřížka: S %1m, V %2m] </translation>
     </message>
 </context>
 <context>
     <name>CMainWindow</name>
     <message>
-        <location filename="../CMainWindow.cpp" line="389"/>
+        <location filename="../CMainWindow.cpp" line="420"/>
         <source>Ele: %1%2</source>
-        <translation type="unfinished"></translation>
+        <translation>Výška: %1%2</translation>
     </message>
     <message>
-        <location filename="../CMainWindow.cpp" line="490"/>
+        <location filename="../CMainWindow.cpp" line="521"/>
         <source>Load GIS Data...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nahrát data GIS...</translation>
     </message>
 </context>
 <context>
@@ -178,606 +244,606 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="140"/>
         <source>Failed ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se...</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="156"/>
         <source>Unspecified</source>
-        <translation type="unfinished"></translation>
+        <translation>Neurčeno</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="157"/>
         <source>French</source>
-        <translation type="unfinished"></translation>
+        <translation>Francouzský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="158"/>
         <source>German</source>
-        <translation type="unfinished"></translation>
+        <translation>Německý</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="159"/>
         <source>Dutch</source>
-        <translation type="unfinished"></translation>
+        <translation>Holandský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="160"/>
         <source>English</source>
-        <translation type="unfinished"></translation>
+        <translation>Anglický</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="161"/>
         <source>Italian</source>
-        <translation type="unfinished"></translation>
+        <translation>Italský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="162"/>
         <source>Finnish</source>
-        <translation type="unfinished"></translation>
+        <translation>Finský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="163"/>
         <source>Swedish</source>
-        <translation type="unfinished"></translation>
+        <translation>Švédský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="164"/>
         <source>Spanish</source>
-        <translation type="unfinished"></translation>
+        <translation>Španělský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="165"/>
         <source>Basque</source>
-        <translation type="unfinished"></translation>
+        <translation>Baskický</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="166"/>
         <source>Catalan</source>
-        <translation type="unfinished"></translation>
+        <translation>Katalánský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="167"/>
         <source>Galician</source>
-        <translation type="unfinished"></translation>
+        <translation>Galicijský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="168"/>
         <source>Welsh</source>
-        <translation type="unfinished"></translation>
+        <translation>Velšský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="169"/>
         <source>Gaelic</source>
-        <translation type="unfinished"></translation>
+        <translation>Gaelský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="170"/>
         <source>Danish</source>
-        <translation type="unfinished"></translation>
+        <translation>Dánský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="171"/>
         <source>Norwegian</source>
-        <translation type="unfinished"></translation>
+        <translation>Norský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="172"/>
         <source>Portuguese</source>
-        <translation type="unfinished"></translation>
+        <translation>Portugalský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="173"/>
         <source>Slovak</source>
-        <translation type="unfinished"></translation>
+        <translation>Slovenský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="174"/>
         <source>Czech</source>
-        <translation type="unfinished"></translation>
+        <translation>Český</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="175"/>
         <source>Croatian</source>
-        <translation type="unfinished"></translation>
+        <translation>Chorvatský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="176"/>
         <source>Hungarian</source>
-        <translation type="unfinished"></translation>
+        <translation>Maďarský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="177"/>
         <source>Polish</source>
-        <translation type="unfinished"></translation>
+        <translation>Polský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="178"/>
         <source>Turkish</source>
-        <translation type="unfinished"></translation>
+        <translation>Turecký</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="179"/>
         <source>Greek</source>
-        <translation type="unfinished"></translation>
+        <translation>Řecký</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="180"/>
         <source>Slovenian</source>
-        <translation type="unfinished"></translation>
+        <translation>Slovinský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="181"/>
         <source>Russian</source>
-        <translation type="unfinished"></translation>
+        <translation>Ruský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="182"/>
         <source>Estonian</source>
-        <translation type="unfinished"></translation>
+        <translation>Estonský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="183"/>
         <source>Latvian</source>
-        <translation type="unfinished"></translation>
+        <translation>Lotyšský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="184"/>
         <source>Romanian</source>
-        <translation type="unfinished"></translation>
+        <translation>Rumunský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="185"/>
         <source>Albanian</source>
-        <translation type="unfinished"></translation>
+        <translation>Albánský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="186"/>
         <source>Bosnian</source>
-        <translation type="unfinished"></translation>
+        <translation>Bosenský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="187"/>
         <source>Lithuanian</source>
-        <translation type="unfinished"></translation>
+        <translation>Litevský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="188"/>
         <source>Serbian</source>
-        <translation type="unfinished"></translation>
+        <translation>Srbský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="189"/>
         <source>Macedonian</source>
-        <translation type="unfinished"></translation>
+        <translation>Makedonský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="190"/>
         <source>Bulgarian</source>
-        <translation type="unfinished"></translation>
+        <translation>Bulharský</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="247"/>
         <source>Major highway</source>
-        <translation type="unfinished"></translation>
+        <translation>Dálnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="248"/>
         <source>Principal highway</source>
-        <translation type="unfinished"></translation>
+        <translation>Silnice první třídy</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="249"/>
         <source>Other highway</source>
-        <translation type="unfinished"></translation>
+        <translation>Jiné rychlostní silnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="250"/>
         <source>Arterial road</source>
-        <translation type="unfinished"></translation>
+        <translation>Rychlostní silnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="251"/>
         <source>Collector road</source>
-        <translation type="unfinished"></translation>
+        <translation>Státní silnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="252"/>
         <source>Residential street</source>
-        <translation type="unfinished"></translation>
+        <translation>Silnice v obytné oblasti</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="253"/>
         <source>Alley/Private road</source>
-        <translation type="unfinished"></translation>
+        <translation>Soukromá cesta</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="254"/>
         <source>Highway ramp, low speed</source>
-        <translation type="unfinished"></translation>
+        <translation>Nájezd na dálnici/sjezd z dálnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="255"/>
         <source>Highway ramp, high speed</source>
-        <translation type="unfinished"></translation>
+        <translation>Nájezd na dálnici/sjezd z dálnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="256"/>
         <source>Unpaved road</source>
-        <translation type="unfinished"></translation>
+        <translation>Neasfaltovaná cesta</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="257"/>
         <source>Major highway connector</source>
-        <translation type="unfinished"></translation>
+        <translation>Dalniční přivaděč</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="258"/>
         <source>Roundabout</source>
-        <translation type="unfinished"></translation>
+        <translation>Kruhový objezd</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="259"/>
         <source>Railroad</source>
-        <translation type="unfinished"></translation>
+        <translation>Železnice, koleje</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="260"/>
         <source>Shoreline</source>
-        <translation type="unfinished"></translation>
+        <translation>Břeh</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="261"/>
         <source>Trail</source>
-        <translation type="unfinished"></translation>
+        <translation>Cesta</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="262"/>
         <source>Stream</source>
-        <translation type="unfinished"></translation>
+        <translation>Proud</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="263"/>
         <source>Time zone</source>
-        <translation type="unfinished"></translation>
+        <translation>Časové pásmo</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="264"/>
         <location filename="../map/CMapIMG.cpp" line="265"/>
         <source>Ferry</source>
-        <translation type="unfinished"></translation>
+        <translation>Přívoz</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="266"/>
         <source>State/province border</source>
-        <translation type="unfinished"></translation>
+        <translation>Státní/Zemská hranice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="267"/>
         <source>County/parish border</source>
-        <translation type="unfinished"></translation>
+        <translation>Krajská/Obecní hranice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="268"/>
         <source>International border</source>
-        <translation type="unfinished"></translation>
+        <translation>Mezinárodní hranice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="269"/>
         <source>River</source>
-        <translation type="unfinished"></translation>
+        <translation>Řeka</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="270"/>
         <source>Minor land contour</source>
-        <translation type="unfinished"></translation>
+        <translation>Malá vrstevnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="271"/>
         <source>Intermediate land contour</source>
-        <translation type="unfinished"></translation>
+        <translation>Střední vrstevnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="272"/>
         <source>Major land contour</source>
-        <translation type="unfinished"></translation>
+        <translation>Velká vrstevnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="273"/>
         <source>Minor depth contour</source>
-        <translation type="unfinished"></translation>
+        <translation>Malá hloubková čára</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="274"/>
         <source>Intermediate depth contour</source>
-        <translation type="unfinished"></translation>
+        <translation>Střední hloubková čára</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="275"/>
         <source>Major depth contour</source>
-        <translation type="unfinished"></translation>
+        <translation>Velká hloubková čára</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="276"/>
         <source>Intermittent stream</source>
-        <translation type="unfinished"></translation>
+        <translation>Přerušovaný potok (Wadi)</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="277"/>
         <location filename="../map/CMapIMG.cpp" line="359"/>
         <source>Airport runway</source>
-        <translation type="unfinished"></translation>
+        <translation>Přistávací dráha</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="278"/>
         <source>Pipeline</source>
-        <translation type="unfinished"></translation>
+        <translation>Dálkové potrubí</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="279"/>
         <source>Powerline</source>
-        <translation type="unfinished"></translation>
+        <translation>Elektrické vedení</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="280"/>
         <source>Marine boundary</source>
-        <translation type="unfinished"></translation>
+        <translation>Hranice moře</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="281"/>
         <source>Hazard boundary</source>
-        <translation type="unfinished"></translation>
+        <translation>Nebezpečná hranice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="346"/>
         <source>Large urban area (&gt;200K)</source>
-        <translation type="unfinished"></translation>
+        <translation>Velkoměstská oblast (&gt;200 000)</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="347"/>
         <source>Small urban area (&lt;200K)</source>
-        <translation type="unfinished"></translation>
+        <translation>Maloměstská oblast (&gt;200 000)</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="348"/>
         <source>Rural housing area</source>
-        <translation type="unfinished"></translation>
+        <translation>Městská obytná oblast</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="349"/>
         <source>Military base</source>
-        <translation type="unfinished"></translation>
+        <translation>Vojenská základna</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="350"/>
         <source>Parking lot</source>
-        <translation type="unfinished"></translation>
+        <translation>Parkoviště</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="351"/>
         <source>Parking garage</source>
-        <translation type="unfinished"></translation>
+        <translation>Parkovací budova</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="352"/>
         <source>Airport</source>
-        <translation type="unfinished"></translation>
+        <translation>Letiště</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="353"/>
         <source>Shopping center</source>
-        <translation type="unfinished"></translation>
+        <translation>Nákupní středisko</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="354"/>
         <source>Marina</source>
-        <translation type="unfinished"></translation>
+        <translation>Přístav</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="355"/>
         <source>University/College</source>
-        <translation type="unfinished"></translation>
+        <translation>Univerzita/Vysoká škola</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="356"/>
         <source>Hospital</source>
-        <translation type="unfinished"></translation>
+        <translation>Nemocnice</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="357"/>
         <source>Industrial complex</source>
-        <translation type="unfinished"></translation>
+        <translation>Průmyslový celek</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="358"/>
         <source>Reservation</source>
-        <translation type="unfinished"></translation>
+        <translation>Chráněné území</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="360"/>
         <source>Man-made area</source>
-        <translation type="unfinished"></translation>
+        <translation>Zástavba</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="361"/>
         <source>Sports complex</source>
-        <translation type="unfinished"></translation>
+        <translation>Oblast pro tělesné činnosti</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="362"/>
         <source>Golf course</source>
-        <translation type="unfinished"></translation>
+        <translation>Golfové hřiště</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="363"/>
         <source>Cemetery</source>
-        <translation type="unfinished"></translation>
+        <translation>Hřbitov</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="364"/>
         <location filename="../map/CMapIMG.cpp" line="365"/>
         <location filename="../map/CMapIMG.cpp" line="366"/>
         <source>National park</source>
-        <translation type="unfinished"></translation>
+        <translation>Národní park</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="367"/>
         <source>City park</source>
-        <translation type="unfinished"></translation>
+        <translation>Městské sady</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="368"/>
         <location filename="../map/CMapIMG.cpp" line="369"/>
         <location filename="../map/CMapIMG.cpp" line="370"/>
         <source>State park</source>
-        <translation type="unfinished"></translation>
+        <translation>Státní park</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="371"/>
         <source>Forest</source>
-        <translation type="unfinished"></translation>
+        <translation>Les</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="372"/>
         <source>Ocean</source>
-        <translation type="unfinished"></translation>
+        <translation>Oceán</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="373"/>
         <location filename="../map/CMapIMG.cpp" line="375"/>
         <location filename="../map/CMapIMG.cpp" line="385"/>
         <source>Blue (unknown)</source>
-        <translation type="unfinished"></translation>
+        <translation>Modrá (neznámé)</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="374"/>
         <source>Sea</source>
-        <translation type="unfinished"></translation>
+        <translation>Moře</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="376"/>
         <location filename="../map/CMapIMG.cpp" line="377"/>
         <location filename="../map/CMapIMG.cpp" line="384"/>
         <source>Large lake</source>
-        <translation type="unfinished"></translation>
+        <translation>Velké jezero</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="378"/>
         <location filename="../map/CMapIMG.cpp" line="379"/>
         <source>Medium lake</source>
-        <translation type="unfinished"></translation>
+        <translation>Střední jezero</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="380"/>
         <location filename="../map/CMapIMG.cpp" line="381"/>
         <source>Small lake</source>
-        <translation type="unfinished"></translation>
+        <translation>Malé jezero</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="382"/>
         <location filename="../map/CMapIMG.cpp" line="383"/>
         <source>Major lake</source>
-        <translation type="unfinished"></translation>
+        <translation>Velmi velké jezero</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="386"/>
         <source>Major River</source>
-        <translation type="unfinished"></translation>
+        <translation>Veletok</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="387"/>
         <source>Large River</source>
-        <translation type="unfinished"></translation>
+        <translation>Velká řeka</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="388"/>
         <source>Medium River</source>
-        <translation type="unfinished"></translation>
+        <translation>Střední řeka</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="389"/>
         <source>Small River</source>
-        <translation type="unfinished"></translation>
+        <translation>Malá řeka</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="392"/>
         <source>Intermittent water</source>
-        <translation type="unfinished"></translation>
+        <translation>Přerušovaná voda</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="393"/>
         <source>Wetland/Swamp</source>
-        <translation type="unfinished"></translation>
+        <translation>Močál/Bažina</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="394"/>
         <source>Glacier</source>
-        <translation type="unfinished"></translation>
+        <translation>Ledovec</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="395"/>
         <source>Orchard/Plantation</source>
-        <translation type="unfinished"></translation>
+        <translation>Sad/Plantáž</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="396"/>
         <source>Scrub</source>
-        <translation type="unfinished"></translation>
+        <translation>Křoví</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="397"/>
         <source>Tundra</source>
-        <translation type="unfinished"></translation>
+        <translation>Tundra</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="398"/>
         <source>Flat</source>
-        <translation type="unfinished"></translation>
+        <translation>Rovina</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="399"/>
         <source>???</source>
-        <translation type="unfinished"></translation>
+        <translation>???</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="437"/>
         <source>Failed to read: </source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se přečíst: </translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="481"/>
         <source>Failed to open: </source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se otevřít: </translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="505"/>
         <location filename="../map/CMapIMG.cpp" line="509"/>
         <source>Bad file format: </source>
-        <translation type="unfinished"></translation>
+        <translation>Špatný formát souboru: </translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="600"/>
         <source>Failed to read file structure: </source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se přečíst stavbu souboru: </translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="633"/>
         <source>Loading %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Nahrává se %1</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="638"/>
         <source>User abort: </source>
-        <translation type="unfinished"></translation>
+        <translation>Zrušeno uživatelem: </translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="639"/>
         <source>File is NT format. QMapShack is unable to read map files with NT format: </source>
-        <translation type="unfinished"></translation>
+        <translation>Soubor je ve formátu NT. QMapShack nedokáže číst mapové soubory ve formátu NT: </translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="713"/>
         <source>File contains locked / encypted data. Garmin does not want you to use this file with any other software than the one supplied by Garmin.</source>
-        <translation type="unfinished"></translation>
+        <translation>Soubor obsahuje zamknutá/zašifrovaná data. Garmin nechce, aby byl tento soubor použit s jiným programem než dodaným Garminem.</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="2363"/>
@@ -789,19 +855,19 @@
         <location filename="../map/CMapIMG.cpp" line="2439"/>
         <location filename="../map/CMapIMG.cpp" line="2444"/>
         <source>Point of Interest</source>
-        <translation type="unfinished"></translation>
+        <translation>Podivuhodnost</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="2569"/>
         <source>Unknown</source>
-        <translation type="unfinished"></translation>
+        <translation>Neznámý</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="2616"/>
         <location filename="../map/CMapIMG.cpp" line="2625"/>
         <location filename="../map/CMapIMG.cpp" line="2632"/>
         <source>Area</source>
-        <translation type="unfinished"></translation>
+        <translation>Oblast</translation>
     </message>
 </context>
 <context>
@@ -809,12 +875,30 @@
     <message>
         <location filename="../map/CMapList.cpp" line="148"/>
         <source>Deactivate</source>
-        <translation type="unfinished"></translation>
+        <translation>Vypnout</translation>
     </message>
     <message>
         <location filename="../map/CMapList.cpp" line="148"/>
         <source>Activate</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapnout</translation>
+    </message>
+</context>
+<context>
+    <name>CMapMAP</name>
+    <message>
+        <location filename="../map/CMapMAP.cpp" line="46"/>
+        <source>Failed ...</source>
+        <translation type="unfinished">Nepodařilo se...</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapMAP.cpp" line="65"/>
+        <source>Failed to open: </source>
+        <translation type="unfinished">Nepodařilo se otevřít: </translation>
+    </message>
+    <message>
+        <location filename="../map/CMapMAP.cpp" line="75"/>
+        <source>Bad file format: </source>
+        <translation type="unfinished">Špatný formát souboru: </translation>
     </message>
 </context>
 <context>
@@ -822,11 +906,19 @@
     <message>
         <location filename="../map/CMapPathSetup.cpp" line="39"/>
         <source>Add or remove paths containing maps. There can be multiple maps in a path but no sub-path is parsed. Supported formats are: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidat nebo odstranit cesty obsahující mapy. V cestě může být více map, ale žádná podcesta není zpracována. Podporovanými formáty jsou: %1</translation>
     </message>
     <message>
         <location filename="../map/CMapPathSetup.cpp" line="54"/>
         <source>Select map path...</source>
+        <translation>Vybrat cestu k mapě...</translation>
+    </message>
+</context>
+<context>
+    <name>CMapPropSetup</name>
+    <message>
+        <location filename="../map/CMapPropSetup.cpp" line="151"/>
+        <source>Cache path...</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -842,22 +934,22 @@
         <location filename="../map/CMapRMAP.cpp" line="208"/>
         <location filename="../map/CMapRMAP.cpp" line="236"/>
         <source>Error...</source>
-        <translation type="unfinished"></translation>
+        <translation>Chyba...</translation>
     </message>
     <message>
         <location filename="../map/CMapRMAP.cpp" line="47"/>
         <source>This is not a TwoNav RMAP file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Toto není soubor TwoNav RMAP</translation>
     </message>
     <message>
         <location filename="../map/CMapRMAP.cpp" line="56"/>
         <source>Unknown sub-format.</source>
-        <translation type="unfinished"></translation>
+        <translation>Neznámý podformát.</translation>
     </message>
     <message>
         <location filename="../map/CMapRMAP.cpp" line="126"/>
         <source>Unknown version.</source>
-        <translation type="unfinished"></translation>
+        <translation>Neznámá verze</translation>
     </message>
     <message>
         <location filename="../map/CMapRMAP.cpp" line="143"/>
@@ -865,12 +957,12 @@
         <location filename="../map/CMapRMAP.cpp" line="186"/>
         <location filename="../map/CMapRMAP.cpp" line="208"/>
         <source>Failed to read reference point.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se přečíst referenční bod.</translation>
     </message>
     <message>
         <location filename="../map/CMapRMAP.cpp" line="236"/>
         <source>Unknown projection and datum (%1%2).</source>
-        <translation type="unfinished"></translation>
+        <translation>Neznámé promítání a datum (%1%2).</translation>
     </message>
 </context>
 <context>
@@ -881,116 +973,244 @@
         <location filename="../map/CMapVRT.cpp" line="88"/>
         <location filename="../map/CMapVRT.cpp" line="123"/>
         <source>Error...</source>
-        <translation type="unfinished"></translation>
+        <translation>Chyba...</translation>
     </message>
     <message>
         <location filename="../map/CMapVRT.cpp" line="46"/>
         <location filename="../map/CMapVRT.cpp" line="60"/>
         <source>Failed to load file: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se nahrát soubor %1
+</translation>
     </message>
     <message>
         <location filename="../map/CMapVRT.cpp" line="88"/>
         <source>File must be 8 bit palette or gray indexed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Soubor musí mít 8 bitovou barevnou paletu nebo být v odstínech šedi.</translation>
     </message>
     <message>
         <location filename="../map/CMapVRT.cpp" line="123"/>
         <source>No georeference information found.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nenalezeny žádné údaje o vyjádření prostorových vztahů.</translation>
     </message>
 </context>
 <context>
-    <name>CProjWizard</name>
+    <name>CMapWMTS</name>
     <message>
-        <location filename="../grid/CProjWizard.cpp" line="55"/>
-        <source>north</source>
-        <translation type="unfinished"></translation>
+        <location filename="../map/CMapWMTS.cpp" line="44"/>
+        <location filename="../map/CMapWMTS.cpp" line="54"/>
+        <location filename="../map/CMapWMTS.cpp" line="64"/>
+        <location filename="../map/CMapWMTS.cpp" line="73"/>
+        <location filename="../map/CMapWMTS.cpp" line="188"/>
+        <source>Error...</source>
+        <translation type="unfinished">Chyba...</translation>
     </message>
     <message>
-        <location filename="../grid/CProjWizard.cpp" line="56"/>
-        <source>south</source>
+        <location filename="../map/CMapWMTS.cpp" line="44"/>
+        <source>Failed to open %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../grid/CProjWizard.cpp" line="211"/>
-        <source>Error...</source>
-        <translation type="unfinished"></translation>
+        <location filename="../map/CMapWMTS.cpp" line="54"/>
+        <source>Failed to read: %1
+line %2, column %3:
+ %4</source>
+        <translation type="unfinished">Chyba při čtení: %1
+Řádek %2, Sloupec %3:
+%4</translation>
     </message>
     <message>
-        <location filename="../grid/CProjWizard.cpp" line="211"/>
-        <source>The value
-'%1'
-is not a valid coordinate system definition:
-%2</source>
+        <location filename="../map/CMapWMTS.cpp" line="64"/>
+        <source>Failed to read: %1
+Unknown structure.</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>CProjWpt</name>
     <message>
-        <location filename="../gis/wpt/CProjWpt.cpp" line="63"/>
-        <source>Edit name...</source>
+        <location filename="../map/CMapWMTS.cpp" line="73"/>
+        <source>Unexpexted service. '* WMTS 1.0.0' is expected. '%1 %2' is read.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CProjWpt.cpp" line="63"/>
-        <source>Enter new waypoint name.</source>
+        <location filename="../map/CMapWMTS.cpp" line="188"/>
+        <source>No georeference information found.</source>
+        <translation type="unfinished">Nenalezeny žádné údaje o vyjádření prostorových vztahů.</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="243"/>
+        <source>--- All ---</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>CTextEditWidget</name>
     <message>
-        <location filename="../helpers/CTextEditWidget.cpp" line="73"/>
-        <source>&Color...</source>
+        <location filename="../map/CMapWMTS.cpp" line="323"/>
+        <source>%1: %2 tiles pending</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>IAbout</name>
+    <name>CMouseNormal</name>
     <message>
-        <location filename="../IAbout.ui" line="14"/>
-        <source>About....</source>
-        <translation type="unfinished"></translation>
+        <location filename="../mouse/CMouseNormal.cpp" line="41"/>
+        <source>Add Waypoint</source>
+        <translation>Přidat cestovní bod</translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="38"/>
-        <source><b>QMapShack</b>, Version</source>
+        <location filename="../mouse/CMouseNormal.cpp" line="42"/>
+        <source>Add Track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="45"/>
-        <location filename="../IAbout.ui" line="73"/>
-        <location filename="../IAbout.ui" line="87"/>
-        <location filename="../IAbout.ui" line="101"/>
-        <source>TextLabel</source>
+        <location filename="../mouse/CMouseNormal.cpp" line="43"/>
+        <source>Add Area</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>CPlotDistance</name>
     <message>
-        <location filename="../IAbout.ui" line="66"/>
-        <source>Qt</source>
-        <translation type="unfinished"></translation>
+        <location filename="../plot/CPlotDistance.cpp" line="55"/>
+        <source>distance [%1]</source>
+        <translation>Vzdálenost [%1]</translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="80"/>
-        <source>GDAL</source>
-        <translation type="unfinished"></translation>
+        <location filename="../plot/CPlotDistance.cpp" line="59"/>
+        <source>time [h]</source>
+        <translation>Čas [h]</translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="94"/>
-        <source>Proj4</source>
-        <translation type="unfinished"></translation>
+        <location filename="../plot/CPlotDistance.cpp" line="61"/>
+        <source>distance. [%1]</source>
+        <translation>Vzdálenost [%1]</translation>
+    </message>
+</context>
+<context>
+    <name>CPlotProfile</name>
+    <message>
+        <location filename="../plot/CPlotProfile.cpp" line="67"/>
+        <source>distance [%1]</source>
+        <translation>Vzdálenost [%1]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotProfile.cpp" line="71"/>
+        <source>time [h]</source>
+        <translation>Čas [h]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotProfile.cpp" line="73"/>
+        <source>alt. [%1]</source>
+        <translation>Výška [%1]</translation>
+    </message>
+</context>
+<context>
+    <name>CPlotSpeed</name>
+    <message>
+        <location filename="../plot/CPlotSpeed.cpp" line="54"/>
+        <source>distance [%1]</source>
+        <translation>Vzdálenost [%1]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotSpeed.cpp" line="58"/>
+        <source>time [h]</source>
+        <translation>Čas [h]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotSpeed.cpp" line="60"/>
+        <source>speed. [%1]</source>
+        <translation>Rychlost [%1]</translation>
+    </message>
+</context>
+<context>
+    <name>CProjWizard</name>
+    <message>
+        <location filename="../grid/CProjWizard.cpp" line="55"/>
+        <source>north</source>
+        <translation>Sever</translation>
+    </message>
+    <message>
+        <location filename="../grid/CProjWizard.cpp" line="56"/>
+        <source>south</source>
+        <translation>Jih</translation>
+    </message>
+    <message>
+        <location filename="../grid/CProjWizard.cpp" line="211"/>
+        <source>Error...</source>
+        <translation>Chyba...</translation>
+    </message>
+    <message>
+        <location filename="../grid/CProjWizard.cpp" line="211"/>
+        <source>The value
+'%1'
+is not a valid coordinate system definition:
+%2</source>
+        <translation>Zadání:
+'%1'
+není platným vymezením soustavy souřadnic
+%2</translation>
+    </message>
+</context>
+<context>
+    <name>CProjWpt</name>
+    <message>
+        <location filename="../gis/wpt/CProjWpt.cpp" line="63"/>
+        <source>Edit name...</source>
+        <translation>Upravit název...</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CProjWpt.cpp" line="63"/>
+        <source>Enter new waypoint name.</source>
+        <translation>Zadat  nový název cestovního bodu.</translation>
+    </message>
+</context>
+<context>
+    <name>CTextEditWidget</name>
+    <message>
+        <location filename="../helpers/CTextEditWidget.cpp" line="73"/>
+        <source>&Color...</source>
+        <translation>B&arva...</translation>
+    </message>
+</context>
+<context>
+    <name>IAbout</name>
+    <message>
+        <location filename="../IAbout.ui" line="14"/>
+        <source>About....</source>
+        <translation>O programu...</translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="117"/>
+        <location filename="../IAbout.ui" line="43"/>
+        <source><b>QMapShack</b>, Version</source>
+        <translation><b>QMapShack</b>, verze</translation>
+    </message>
+    <message>
+        <location filename="../IAbout.ui" line="50"/>
+        <location filename="../IAbout.ui" line="94"/>
+        <location filename="../IAbout.ui" line="108"/>
+        <location filename="../IAbout.ui" line="122"/>
+        <source>TextLabel</source>
+        <translation>Textový štítek</translation>
+    </message>
+    <message>
+        <location filename="../IAbout.ui" line="87"/>
+        <source>Qt</source>
+        <translation>Qt</translation>
+    </message>
+    <message>
+        <location filename="../IAbout.ui" line="101"/>
+        <source>GDAL</source>
+        <translation>GDAL</translation>
+    </message>
+    <message>
+        <location filename="../IAbout.ui" line="115"/>
+        <source>Proj4</source>
+        <translation>Proj4</translation>
+    </message>
+    <message>
+        <location filename="../IAbout.ui" line="138"/>
         <source>This software is licensed under GPL3 or any later version</source>
-        <translation type="unfinished"></translation>
+        <translation>Tento program je licencován pod GPL3 nebo kteroukoli pozdější verzí</translation>
     </message>
     <message utf8="true">
-        <location filename="../IAbout.ui" line="124"/>
+        <location filename="../IAbout.ui" line="145"/>
         <source>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</source>
-        <translation type="unfinished"></translation>
+        <translation>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</translation>
     </message>
 </context>
 <context>
@@ -998,17 +1218,17 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../canvas/ICanvasSetup.ui" line="14"/>
         <source>Setup Map Workspace...</source>
-        <translation type="unfinished"></translation>
+        <translation>Stanovit pracovní oblast mapy...</translation>
     </message>
     <message>
         <location filename="../canvas/ICanvasSetup.ui" line="22"/>
         <source>Projection & Datum</source>
-        <translation type="unfinished"></translation>
+        <translation>Promítání a datum</translation>
     </message>
     <message>
         <location filename="../canvas/ICanvasSetup.ui" line="32"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
 </context>
 <context>
@@ -1016,18 +1236,18 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../dem/IDemPathSetup.ui" line="14"/>
         <source>Setup DEM file pathss</source>
-        <translation type="unfinished"></translation>
+        <translation>Stanovit cesty k souborům DEM</translation>
     </message>
     <message>
         <location filename="../dem/IDemPathSetup.ui" line="38"/>
         <location filename="../dem/IDemPathSetup.ui" line="58"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
         <location filename="../dem/IDemPathSetup.ui" line="107"/>
         <source>-</source>
-        <translation type="unfinished"></translation>
+        <translation>-</translation>
     </message>
 </context>
 <context>
@@ -1035,38 +1255,38 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../dem/IDemPropSetup.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Formulář</translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="35"/>
+        <location filename="../dem/IDemPropSetup.ui" line="20"/>
         <source><html><head/><body><p>Change opacity of map</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Změnit neprůhlednost mapy</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="47"/>
+        <location filename="../dem/IDemPropSetup.ui" line="32"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <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="50"/>
-        <location filename="../dem/IDemPropSetup.ui" line="87"/>
+        <location filename="../dem/IDemPropSetup.ui" line="35"/>
+        <location filename="../dem/IDemPropSetup.ui" line="72"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="71"/>
+        <location filename="../dem/IDemPropSetup.ui" line="56"/>
         <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 type="unfinished"></translation>
+        <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="84"/>
+        <location filename="../dem/IDemPropSetup.ui" line="69"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <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="110"/>
+        <location filename="../dem/IDemPropSetup.ui" line="97"/>
         <source>Hillshading</source>
-        <translation type="unfinished"></translation>
+        <translation>Stínování kopců</translation>
     </message>
 </context>
 <context>
@@ -1074,22 +1294,22 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../dem/IDemList.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Formulář</translation>
     </message>
     <message>
         <location filename="../dem/IDemList.ui" line="118"/>
         <source>To add files with elevation data use File->Setup DEM Paths. </source>
-        <translation type="unfinished"></translation>
+        <translation>Pro přidání souborů s údaji o výšce použijte Soubor → Nastavit cesty k DEM. </translation>
     </message>
     <message>
         <location filename="../dem/IDemList.ui" line="131"/>
         <source>Use the context menu (right mouse button click on entry) to activate a file. Use drag-n-drop to move the activated file in the process order. </source>
-        <translation type="unfinished"></translation>
+        <translation>Použijte související nabídku (klepnutí pravým tlačítkem myši na položku) pro zapnutí souboru. Použijte přetažení a upuštění pro posunutí zapnutého souboru v pořadí procesů. </translation>
     </message>
     <message>
         <location filename="../dem/IDemList.ui" line="156"/>
         <source>Activate</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapnout</translation>
     </message>
 </context>
 <context>
@@ -1097,7 +1317,7 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="20"/>
         <source>Dialog</source>
-        <translation type="unfinished"></translation>
+        <translation>Dialog</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="35"/>
@@ -1113,102 +1333,234 @@ is not a valid coordinate system definition:
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="209"/>
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="222"/>
         <source>-</source>
-        <translation type="unfinished"></translation>
+        <translation>-</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="43"/>
         <source>about:blank</source>
-        <translation type="unfinished"></translation>
+        <translation>o:prázdný</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="59"/>
         <source>Position:</source>
-        <translation type="unfinished"></translation>
+        <translation>Poloha:</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="79"/>
         <source>Difficulty</source>
-        <translation type="unfinished"></translation>
+        <translation>Obtížnost</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="157"/>
         <source>Terrain</source>
-        <translation type="unfinished"></translation>
+        <translation>Terén</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="231"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IDetailsGeoCache.ui" line="249"/>
         <source>Hint:</source>
-        <translation type="unfinished"></translation>
+        <translation>Rada:</translation>
     </message>
 </context>
 <context>
-    <name>IDetailsWpt</name>
+    <name>IDetailsOvlArea</name>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="14"/>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="14"/>
         <source>Dialog</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Dialog</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="47"/>
-        <source><html><head/><body><p>Edit description.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="37"/>
+        <source>-</source>
+        <translation type="unfinished">-</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="50"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="179"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="247"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="273"/>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="75"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">...</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="80"/>
-        <source>Position:</source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="105"/>
+        <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="87"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="113"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="139"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="203"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="311"/>
-        <source>-</source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="126"/>
+        <source>Border width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="100"/>
-        <source>Ele.</source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="140"/>
+        <source>Style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="126"/>
-        <source>Proximity:</source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="159"/>
+        <source>Opacity</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="176"/>
-        <source><html><head/><body><p>Edit comment.</p></body></html></source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="179"/>
+        <source>Points</source>
+        <translation type="unfinished">Body</translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="206"/>
+        <source>Position</source>
+        <translation type="unfinished">Poloha</translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="215"/>
+        <source>Hist.</source>
+        <translation type="unfinished">Hist.</translation>
+    </message>
+</context>
+<context>
+    <name>IDetailsTrk</name>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="14"/>
+        <source>Form</source>
+        <translation>Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="28"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="49"/>
+        <source>-
+-</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="228"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="117"/>
+        <source>Profile</source>
+        <translation>Profil</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="124"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="221"/>
+        <source>Speed</source>
+        <translation>Rychlost</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="131"/>
+        <source>Progress</source>
+        <translation>Postup</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="148"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="201"/>
+        <source>Time</source>
+        <translation>Čas</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="206"/>
+        <source>Ele.</source>
+        <translation>Výška</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="211"/>
+        <source>Delta</source>
+        <translation>Rozdíl</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="216"/>
+        <source>Dist.</source>
+        <translation>Vzdál.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="226"/>
+        <source>Slope</source>
+        <translation>Sklon</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="231"/>
+        <source>Ascend</source>
+        <translation>Stoupání</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="236"/>
+        <source>Descend</source>
+        <translation>Klesání</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="241"/>
+        <source>Position</source>
+        <translation>Poloha</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="261"/>
+        <source>Info</source>
+        <translation>Informace</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="291"/>
+        <source>-</source>
+        <translation>-</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="302"/>
+        <source>Hist.</source>
+        <translation>Hist.</translation>
+    </message>
+</context>
+<context>
+    <name>IDetailsWpt</name>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="14"/>
+        <source>Dialog</source>
+        <translation>Dialog</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="233"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="259"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="49"/>
+        <source>Position:</source>
+        <translation>Poloha:</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="56"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="82"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="108"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="155"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="189"/>
+        <source>-</source>
+        <translation>-</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="69"/>
+        <source>Ele.</source>
+        <translation>Výška</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="95"/>
+        <source>Proximity:</source>
+        <translation>Blízkost:</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="214"/>
         <source><html><head/><body><p>The waypoint was imported to QMapShack and was changed. It does not show the original data anymore. Please see history for changes. </p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Cestovní bod byl zaveden do QMapShacku a byl změněn. Už neukazuje původní data. Prohlédněte si, prosím, historii kvůli změnám. </p></body></html></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="244"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="230"/>
         <source><html><head/><body><p>Read Only Mode</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Režim pouze pro čtení</p></body></html></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="304"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="148"/>
         <source>Date/Time:</source>
-        <translation type="unfinished"></translation>
+        <translation>Datum/Čas</translation>
     </message>
 </context>
 <context>
@@ -1216,12 +1568,12 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../gis/IGisWidget.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Formulář</translation>
     </message>
     <message>
-        <location filename="../gis/IGisWidget.ui" line="53"/>
+        <location filename="../gis/IGisWidget.ui" line="59"/>
         <source>State</source>
-        <translation type="unfinished"></translation>
+        <translation>Stav</translation>
     </message>
 </context>
 <context>
@@ -1229,17 +1581,17 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../grid/IGridSetup.ui" line="14"/>
         <source>Setup Grid...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavení mřížky...</translation>
     </message>
     <message>
         <location filename="../grid/IGridSetup.ui" line="22"/>
         <source>Projection</source>
-        <translation type="unfinished"></translation>
+        <translation>Promítání</translation>
     </message>
     <message>
         <location filename="../grid/IGridSetup.ui" line="37"/>
         <source>restore default</source>
-        <translation type="unfinished"></translation>
+        <translation>Obnovit výchozí</translation>
     </message>
     <message>
         <location filename="../grid/IGridSetup.ui" line="40"/>
@@ -1247,27 +1599,27 @@ is not a valid coordinate system definition:
         <location filename="../grid/IGridSetup.ui" line="92"/>
         <location filename="../grid/IGridSetup.ui" line="146"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
         <location filename="../grid/IGridSetup.ui" line="63"/>
         <source>Get projection from current map.</source>
-        <translation type="unfinished"></translation>
+        <translation>Promítání převzít z nynější mapy.</translation>
     </message>
     <message>
         <location filename="../grid/IGridSetup.ui" line="89"/>
         <source>projection wizzard</source>
-        <translation type="unfinished"></translation>
+        <translation>Průvodce pro promítání</translation>
     </message>
     <message>
         <location filename="../grid/IGridSetup.ui" line="130"/>
         <source>Grid color</source>
-        <translation type="unfinished"></translation>
+        <translation>Barva mřížky</translation>
     </message>
     <message>
         <location filename="../grid/IGridSetup.ui" line="143"/>
         <source>setup grid color</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavení barvy mřížky</translation>
     </message>
 </context>
 <context>
@@ -1275,12 +1627,12 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../helpers/IInputDialog.ui" line="14"/>
         <source>Edit...</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravit...</translation>
     </message>
     <message>
         <location filename="../helpers/IInputDialog.ui" line="20"/>
         <source>TextLabel</source>
-        <translation type="unfinished"></translation>
+        <translation>Textový štítek</translation>
     </message>
 </context>
 <context>
@@ -1288,163 +1640,163 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../IMainWindow.ui" line="14"/>
         <source>QMapShack</source>
-        <translation type="unfinished"></translation>
+        <translation>QMapShack</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="60"/>
         <source>File</source>
-        <translation type="unfinished"></translation>
+        <translation>Soubor</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="70"/>
         <source>View</source>
-        <translation type="unfinished"></translation>
+        <translation>Pohled</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="88"/>
         <source>Window</source>
-        <translation type="unfinished"></translation>
+        <translation>Okno</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="93"/>
         <source>?</source>
-        <translation type="unfinished"></translation>
+        <translation>Otázka</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="109"/>
         <source>Maps</source>
-        <translation type="unfinished"></translation>
+        <translation>Mapy</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="146"/>
         <source>Dig. Elev. Model (DEM)</source>
-        <translation type="unfinished"></translation>
+        <translation>Digitální výškový model (DEM)</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="179"/>
         <source>Data</source>
-        <translation type="unfinished"></translation>
+        <translation>Data</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="192"/>
         <source>Add Map Workspace</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidat pracovní oblast mapy</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="195"/>
         <source>Ctrl+T</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+T</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="207"/>
         <source>Show Scale</source>
-        <translation type="unfinished"></translation>
+        <translation>Ukázat měřítko</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="216"/>
         <source>Setup Map Font</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavit písmo mapy</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="228"/>
         <source>Show Grid</source>
-        <translation type="unfinished"></translation>
+        <translation>Ukázat mřížku</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="231"/>
         <source>Ctrl+G</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+G</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="240"/>
         <source>Setup Grid</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavit mřížku</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="243"/>
         <source>Ctrl+Alt+G</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Alt+G</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="255"/>
         <source>Flip Mouse Wheel</source>
-        <translation type="unfinished"></translation>
+        <translation>Obrátit kolečko myši</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="264"/>
         <location filename="../IMainWindow.ui" line="267"/>
         <source>Setup Map Paths</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavit cesty k mapám</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="279"/>
         <source>POI Text</source>
-        <translation type="unfinished"></translation>
+        <translation>Text POI</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="291"/>
         <source>Night / Day</source>
-        <translation type="unfinished"></translation>
+        <translation>Noc/Den</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="303"/>
         <source>Map Tool Tip</source>
-        <translation type="unfinished"></translation>
+        <translation>Rada k nástroji pro mapu</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="312"/>
         <source>Setup DEM Paths</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavit cesty k DEM</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="321"/>
         <source>About</source>
-        <translation type="unfinished"></translation>
+        <translation>O programu</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="330"/>
         <source>Help</source>
-        <translation type="unfinished"></translation>
+        <translation>Nápověda</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="339"/>
         <source>Setup Map Workspace</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavit pracovní oblast mapy</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="348"/>
         <source>Load GIS Data</source>
-        <translation type="unfinished"></translation>
+        <translation>Nahrát data GIS</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="351"/>
         <source>Load projects from file</source>
-        <translation type="unfinished"></translation>
+        <translation>Nahrát projekty ze souboru</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="354"/>
         <source>Ctrl+L</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+L</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="363"/>
         <source>Save All GIS Data</source>
-        <translation type="unfinished"></translation>
+        <translation>Uložit všechna data GIS</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="366"/>
         <source>Save all projects in the workspace</source>
-        <translation type="unfinished"></translation>
+        <translation>Uložit všechny projekty v pracovní oblasti</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="369"/>
         <source>Ctrl+S</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+S</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="378"/>
         <source>Setup Time Zone</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavit časové pásmo</translation>
     </message>
 </context>
 <context>
@@ -1452,22 +1804,26 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../map/IMapList.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Formulář</translation>
     </message>
     <message>
-        <location filename="../map/IMapList.ui" line="100"/>
         <source>To add maps use File->Setup Map Pathss. </source>
+        <translation type="obsolete">Pro přidání map použijte Soubor → Nastavit cesty k mapám. </translation>
+    </message>
+    <message>
+        <location filename="../map/IMapList.ui" line="103"/>
+        <source>To add maps use File->Setup Map Paths. </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../map/IMapList.ui" line="113"/>
+        <location filename="../map/IMapList.ui" line="116"/>
         <source>Use the context menu (right mouse button click on entry) to activate a map. Use drag-n-drop to move the activated map in the draw order. </source>
-        <translation type="unfinished"></translation>
+        <translation>Použijte související nabídku (klepnutí pravým tlačítkem myši na položku) pro zapnutí mapy. Použijte přetažení a upuštění pro posunutí zapnuté mapy v pořadí kreslení. </translation>
     </message>
     <message>
-        <location filename="../map/IMapList.ui" line="138"/>
+        <location filename="../map/IMapList.ui" line="141"/>
         <source>Activate</source>
-        <translation type="unfinished"></translation>
+        <translation>Zapnout</translation>
     </message>
 </context>
 <context>
@@ -1475,18 +1831,18 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../map/IMapPathSetup.ui" line="14"/>
         <source>Setup map paths</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavit cesty k mapám</translation>
     </message>
     <message>
         <location filename="../map/IMapPathSetup.ui" line="38"/>
         <location filename="../map/IMapPathSetup.ui" line="58"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
         <location filename="../map/IMapPathSetup.ui" line="107"/>
         <source>-</source>
-        <translation type="unfinished"></translation>
+        <translation>-</translation>
     </message>
 </context>
 <context>
@@ -1494,61 +1850,108 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../map/IMapPropSetup.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Formulář</translation>
     </message>
     <message>
         <location filename="../map/IMapPropSetup.ui" line="35"/>
         <source><html><head/><body><p>Change opacity of map</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Změnit neprůhlednost mapy</p></body></html></translation>
     </message>
     <message>
         <location filename="../map/IMapPropSetup.ui" line="47"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <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"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
         <location filename="../map/IMapPropSetup.ui" line="71"/>
         <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 type="unfinished"></translation>
+        <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"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <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"/>
         <source>Areas</source>
-        <translation type="unfinished"></translation>
+        <translation>Oblasti</translation>
     </message>
     <message>
         <location filename="../map/IMapPropSetup.ui" line="141"/>
         <source>Lines</source>
-        <translation type="unfinished"></translation>
+        <translation>Čáry</translation>
     </message>
     <message>
         <location filename="../map/IMapPropSetup.ui" line="148"/>
         <source>Points</source>
-        <translation type="unfinished"></translation>
+        <translation>Body</translation>
     </message>
-</context>
-<context>
-    <name>IPositionDialog</name>
     <message>
-        <location filename="../helpers/IPositionDialog.ui" line="14"/>
-        <source>Position ...</source>
+        <location filename="../map/IMapPropSetup.ui" line="184"/>
+        <source>-</source>
+        <translation type="unfinished">-</translation>
+    </message>
+    <message>
+        <location filename="../map/IMapPropSetup.ui" line="208"/>
+        <source>Cache Size (MB)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/IMapPropSetup.ui" line="228"/>
+        <source>Expiration (Days)</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>IMouseEditLine</name>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+        <source>Add points?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+        <source>Add points to temporary line?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+        <source>Warning!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+        <source>This will replace all data of the orignal by a simple line of coordinates. All other data will be lost permanently.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>IPlot</name>
+    <message>
+        <location filename="../plot/IPlot.cpp" line="465"/>
+        <source>No or bad data.</source>
+        <translation>Žádné nebo špatné údaje.</translation>
+    </message>
+</context>
+<context>
+    <name>IPositionDialog</name>
+    <message>
+        <location filename="../helpers/IPositionDialog.ui" line="14"/>
+        <source>Position ...</source>
+        <translation>Poloha...</translation>
+    </message>
     <message>
         <location filename="../helpers/IPositionDialog.ui" line="20"/>
         <source>Enter new position</source>
-        <translation type="unfinished"></translation>
+        <translation>Zadat novou polohu</translation>
     </message>
     <message>
         <location filename="../helpers/IPositionDialog.ui" line="30"/>
@@ -1556,7 +1959,10 @@ is not a valid coordinate system definition:
 "[N|S] ddd mm.sss [W|E] ddd mm.sss"
 or
 "[N|S] ddd.ddd [W|E] ddd.ddd"</source>
-        <translation type="unfinished"></translation>
+        <translation>Špatný polohový formát. Musí být: 
+"[N|S] ddd mm.sss [W|E] ddd mm.sss"
+nebo
+"[N|S] ddd.ddd [W|E] ddd.ddd"</translation>
     </message>
 </context>
 <context>
@@ -1564,57 +1970,57 @@ or
     <message>
         <location filename="../grid/IProjWizard.ui" line="14"/>
         <source>Proj4 Wizzard</source>
-        <translation type="unfinished"></translation>
+        <translation>Průvodce pro Proj4</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="29"/>
         <source>Mercator</source>
-        <translation type="unfinished"></translation>
+        <translation>Mercatorovo zobrazení</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="38"/>
         <source>UTM</source>
-        <translation type="unfinished"></translation>
+        <translation>UTM</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="45"/>
         <source>zone</source>
-        <translation type="unfinished"></translation>
+        <translation>Pásmo</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="82"/>
         <source>user defined</source>
-        <translation type="unfinished"></translation>
+        <translation>Stanoveno uživatelem</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="94"/>
         <source>Datum</source>
-        <translation type="unfinished"></translation>
+        <translation>Datum</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="104"/>
         <source>World Mercator (OSM)</source>
-        <translation type="unfinished"></translation>
+        <translation>Světový Mercator (OSM)</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="124"/>
         <source>Result:</source>
-        <translation type="unfinished"></translation>
+        <translation>Výsledek:</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="138"/>
         <source>UPS North (North Pole)</source>
-        <translation type="unfinished"></translation>
+        <translation>UPS Sever (Severní pól)</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="145"/>
         <source>UPS South (South Pole)</source>
-        <translation type="unfinished"></translation>
+        <translation>UPS Jih (Jižní pól)</translation>
     </message>
     <message>
         <location filename="../grid/IProjWizard.ui" line="152"/>
         <source>Projection</source>
-        <translation type="unfinished"></translation>
+        <translation>Promítání</translation>
     </message>
 </context>
 <context>
@@ -1622,61 +2028,164 @@ or
     <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="14"/>
         <source>Waypoint Projection</source>
-        <translation type="unfinished"></translation>
+        <translation>Promítnutí cestovního bodu</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="22"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="38"/>
         <source>-</source>
-        <translation type="unfinished"></translation>
+        <translation>-</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="47"/>
         <source>Clone waypoint and move by:</source>
-        <translation type="unfinished"></translation>
+        <translation>Klonovat cestovní bod a posunout o:</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="59"/>
         <source>m</source>
-        <translation type="unfinished"></translation>
+        <translation>m</translation>
     </message>
     <message utf8="true">
         <location filename="../gis/wpt/IProjWpt.ui" line="69"/>
         <source>°</source>
+        <translation>°</translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptEditLine</name>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="26"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="50"/>
+        <source>Save to orignal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="57"/>
+        <source>Save as new</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="64"/>
+        <source>Abort</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptOvlArea</name>
+    <message>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="40"/>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="51"/>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="69"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="98"/>
+        <source>TextLabel</source>
+        <translation type="unfinished">Textový štítek</translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptPoint</name>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="35"/>
+        <source>Delete point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="49"/>
+        <source>Select a range of points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="63"/>
+        <source>Move selected point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="77"/>
+        <source>Add points before the selected point.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="91"/>
+        <source>Add points after the selected point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="38"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="52"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="66"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="80"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="94"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptRange</name>
+    <message>
+        <location filename="../mouse/IScrOptRange.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Formulář</translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptRange.ui" line="32"/>
+        <source>Delete selected range of points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptRange.ui" line="35"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
 </context>
 <context>
     <name>IScrOptRte</name>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Formulář</translation>
     </message>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="28"/>
         <source><html><head/><body><p>View details &amp; Edit</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Zobrazit podrobnosti a upravit</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="31"/>
         <location filename="../gis/rte/IScrOptRte.ui" line="45"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="42"/>
         <source><html><head/><body><p>Delete</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Smazat</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="71"/>
         <source>TextLabel</source>
-        <translation type="unfinished"></translation>
+        <translation>Textový štítek</translation>
     </message>
 </context>
 <context>
@@ -1684,28 +2193,54 @@ or
     <message>
         <location filename="../gis/trk/IScrOptTrk.ui" line="14"/>
         <source>Form</source>
+        <translation>Formulář</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="40"/>
+        <source>View details &amp; Edit properties of track.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
-        <source><html><head/><body><p>View details &amp; Edit</p></body></html></source>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+        <source>Delete</source>
+        <translation type="unfinished">Smazat</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="75"/>
+        <source>Show on-screen profile and detailed information about points.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="46"/>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="60"/>
-        <source>...</source>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+        <source>Cut track at selected point into two tracks.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+        <source>Edit position of track points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><html><head/><body><p>View details &amp; Edit</p></body></html></source>
+        <translation type="obsolete"><html><head/><body><p>Zobrazit podrobnosti a upravit</p></body></html></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
         <location filename="../gis/trk/IScrOptTrk.ui" line="57"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="78"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="95"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="109"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
         <source><html><head/><body><p>Delete</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete"><html><head/><body><p>Smazat</p></body></html></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="86"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="135"/>
         <source>TextLabel</source>
-        <translation type="unfinished"></translation>
+        <translation>Textový štítek</translation>
     </message>
 </context>
 <context>
@@ -1713,12 +2248,12 @@ or
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="20"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Formulář</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="49"/>
         <source><html><head/><body><p>View details &amp; Edit</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Zobrazit podrobnosti a upravit</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="52"/>
@@ -1726,35 +2261,52 @@ or
         <location filename="../gis/wpt/IScrOptWpt.ui" line="87"/>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="101"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="63"/>
         <source><html><head/><body><p>Delete</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Smazat</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="84"/>
         <source><html><head/><body><p>Move waypoint to a new location.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Přesunout cestovní bod do nového umístění.</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="98"/>
         <source><html><head/><body><p>Clone waypoint and move clone a given distance and angle.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Klonovat cestovní bod a přesunout kopii o danou vzdálenost a ve stanoveném úhlu.</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="145"/>
         <source>TextLabel</source>
+        <translation>Textový štítek</translation>
+    </message>
+</context>
+<context>
+    <name>ISelectProjectDialog</name>
+    <message>
+        <source>Dialog</source>
+        <translation type="obsolete">Dialog</translation>
+    </message>
+    <message>
+        <location filename="../helpers/ISelectProjectDialog.ui" line="14"/>
+        <source>Select a project...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../helpers/ISelectProjectDialog.ui" line="20"/>
+        <source>Select project from list or enter new project name.</source>
+        <translation>Vybrat projekt ze seznamu nebo zadat nový název projektu.</translation>
+    </message>
 </context>
 <context>
     <name>ITextEditWidget</name>
     <message>
         <location filename="../helpers/ITextEditWidget.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translation>Formulář</translation>
     </message>
     <message>
         <location filename="../helpers/ITextEditWidget.ui" line="25"/>
@@ -1762,136 +2314,136 @@ or
         <location filename="../helpers/ITextEditWidget.ui" line="51"/>
         <location filename="../helpers/ITextEditWidget.ui" line="64"/>
         <location filename="../helpers/ITextEditWidget.ui" line="77"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="117"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="130"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="143"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="156"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="97"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="110"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="123"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="136"/>
         <location filename="../helpers/ITextEditWidget.ui" line="169"/>
         <location filename="../helpers/ITextEditWidget.ui" line="182"/>
         <location filename="../helpers/ITextEditWidget.ui" line="195"/>
         <location filename="../helpers/ITextEditWidget.ui" line="208"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation>...</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="259"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="263"/>
         <source>Undo</source>
-        <translation type="unfinished"></translation>
+        <translation>Zpět</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="262"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="266"/>
         <source>Ctrl+Z</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Z</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="271"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="275"/>
         <source>Redo</source>
-        <translation type="unfinished"></translation>
+        <translation>Znovu</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="274"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="278"/>
         <source>Ctrl+Shift+Z</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+Z</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="283"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="287"/>
         <source>Cut</source>
-        <translation type="unfinished"></translation>
+        <translation>Vyjmout</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="286"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="290"/>
         <source>Ctrl+X</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+X</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="295"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="299"/>
         <source>Copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Kopírovat</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="298"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="302"/>
         <source>Ctrl+C</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+C</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="307"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="311"/>
         <source>Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>Vložit</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="310"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="314"/>
         <source>Ctrl+V</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+V</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="322"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="326"/>
         <source>Align Left</source>
-        <translation type="unfinished"></translation>
+        <translation>Zarovnat vlevo</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="325"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="329"/>
         <source>Ctrl+L</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+L</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="337"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="341"/>
         <source>Align Right</source>
-        <translation type="unfinished"></translation>
+        <translation>Zarovnat vpravo</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="340"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="344"/>
         <source>Ctrl+R</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+R</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="352"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="356"/>
         <source>Align Center</source>
-        <translation type="unfinished"></translation>
+        <translation>Zarovnat na střed</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="355"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="359"/>
         <source>Ctrl+E</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+E</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="367"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="371"/>
         <source>Align Block</source>
-        <translation type="unfinished"></translation>
+        <translation>Zarovnat do bloku</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="370"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="374"/>
         <source>Ctrl+J</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+J</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="382"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="386"/>
         <source>Underline</source>
-        <translation type="unfinished"></translation>
+        <translation>Podtržení</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="385"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="389"/>
         <source>Ctrl+U</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+U</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="397"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="401"/>
         <source>Bold</source>
-        <translation type="unfinished"></translation>
+        <translation>Tučné</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="400"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="404"/>
         <source>Ctrl+B</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+B</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="412"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="416"/>
         <source>Italic</source>
-        <translation type="unfinished"></translation>
+        <translation>Kurzíva</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="415"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="419"/>
         <source>Ctrl+I</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+I</translation>
     </message>
 </context>
 <context>
@@ -1899,22 +2451,22 @@ or
     <message>
         <location filename="../units/ITimeZoneSetup.ui" line="14"/>
         <source>Setup Time Zone ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavit časové pásmo...</translation>
     </message>
     <message>
         <location filename="../units/ITimeZoneSetup.ui" line="22"/>
         <source>UTC</source>
-        <translation type="unfinished"></translation>
+        <translation>Světový čas (UTC)</translation>
     </message>
     <message>
         <location filename="../units/ITimeZoneSetup.ui" line="29"/>
         <source>Local</source>
-        <translation type="unfinished"></translation>
+        <translation>Místní</translation>
     </message>
     <message>
         <location filename="../units/ITimeZoneSetup.ui" line="36"/>
         <source>Automatic</source>
-        <translation type="unfinished"></translation>
+        <translation>Automaticky</translation>
     </message>
 </context>
 <context>
@@ -1922,7 +2474,7 @@ or
     <message>
         <location filename="../helpers/IWptIconDialog.ui" line="14"/>
         <source>Icons...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ikony...</translation>
     </message>
 </context>
 <context>
@@ -1930,197 +2482,343 @@ or
     <message>
         <location filename="../GeoMath.cpp" line="88"/>
         <source>Error</source>
-        <translation type="unfinished"></translation>
+        <translation>Chyba</translation>
     </message>
     <message>
         <location filename="../GeoMath.cpp" line="88"/>
         <source>Bad position format. Must be: [N|S] ddd mm.sss [W|E] ddd mm.sss</source>
-        <translation type="unfinished"></translation>
+        <translation>Špatný polohový formát. Musí být: "[N|S] ddd mm.sss [W|E] ddd mm.sss"</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="63"/>
-        <location filename="../gis/CGisProject.cpp" line="72"/>
+        <location filename="../gis/CGisProject.cpp" line="77"/>
+        <location filename="../gis/CGisProject.cpp" line="86"/>
         <source>Failed to read...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se přečíst...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="63"/>
+        <location filename="../gis/CGisProject.cpp" line="77"/>
         <source>Failed to read: %1
 line %2, column %3:
  %4</source>
-        <translation type="unfinished"></translation>
+        <translation>Chyba při čtení: %1
+Řádek %2, Sloupec %3:
+%4</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="72"/>
+        <location filename="../gis/CGisProject.cpp" line="86"/>
         <source>Not a GPX file: </source>
-        <translation type="unfinished"></translation>
+        <translation>Není souborem GPX: </translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="339"/>
+        <location filename="../gis/CGisProject.cpp" line="367"/>
         <source>Are you sure you want to delete '%1' from project '%2'?</source>
-        <translation type="unfinished"></translation>
+        <translation>Jste si jistý, že chcete smazat '%1' z projektu '%2'?</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="340"/>
+        <location filename="../gis/CGisProject.cpp" line="368"/>
         <source>Delete...</source>
-        <translation type="unfinished"></translation>
+        <translation>Smazat...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="432"/>
+        <location filename="../gis/CGisProject.cpp" line="485"/>
         <source>Save GIS data to...</source>
-        <translation type="unfinished"></translation>
+        <translation>Uložit data GIS do...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="484"/>
+        <location filename="../gis/CGisProject.cpp" line="537"/>
         <source>File exists ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Soubor existuje...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="485"/>
+        <location filename="../gis/CGisProject.cpp" line="538"/>
         <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 type="unfinished"></translation>
+        <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/CGisProject.cpp" line="538"/>
-        <location filename="../gis/CGisProject.cpp" line="548"/>
+        <location filename="../gis/CGisProject.cpp" line="604"/>
+        <location filename="../gis/CGisProject.cpp" line="614"/>
         <source>Saveing GIS data failed...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se uložit data GIS...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="538"/>
+        <location filename="../gis/CGisProject.cpp" line="604"/>
         <source>Failed to create file '%1'</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se vytvořit soubor '%1'</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="548"/>
+        <location filename="../gis/CGisProject.cpp" line="614"/>
         <source>Failed to write file '%1'</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se zapsat soubor '%1'</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="98"/>
+        <location filename="../gis/IGisItem.cpp" line="182"/>
         <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 type="unfinished"></translation>
+        <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="99"/>
+        <location filename="../gis/IGisItem.cpp" line="183"/>
         <source>Read Only Mode...</source>
-        <translation type="unfinished"></translation>
+        <translation>Režim pouze pro čtení...</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="135"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="319"/>
         <source>Length: %1 %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Délka: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="142"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="326"/>
         <source>, %1%2 %3, %4%5 %6</source>
-        <translation type="unfinished"></translation>
+        <translation>, %1%2 %3, %4%5 %6</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="150"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="334"/>
         <source>Time: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Čas: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="153"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="163"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="337"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="347"/>
         <source>, Speed: %1 %2</source>
-        <translation type="unfinished"></translation>
+        <translation>, Rychlost: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="160"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="344"/>
         <source>Moving: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Pohyb: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="169"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
         <source>Start: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Začátek: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="174"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="358"/>
         <source>End: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Konec: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="178"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
         <source>Points: %1 (%2)</source>
+        <translation>Body: %1 (%2)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="374"/>
+        <source>Ele.: %1 %2</source>
+        <translation>Výška: %1 %2</translation>
+    </message>
+    <message>
+        <source> slope: %1°(%2%)</source>
+        <translation type="obsolete"> sklon: %1°(%2%)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="382"/>
+        <source> speed: %1%2</source>
+        <translation> rychlost: %1%2</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="394"/>
+        <source>Ascend: %1%2 (%3%)</source>
+        <translation>Stoupání: %1%2 (%3%)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="398"/>
+        <source>Ascend: - (-)</source>
+        <translation>Stoupání: - (-)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="408"/>
+        <source> Descend: - (-) </source>
+        <translation> Klesání: - (-) </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="429"/>
+        <source> Moving: - (-) </source>
+        <translation> Pohyb: - (-) </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="404"/>
+        <source> Descend: %1%2 (%3%)</source>
+        <translation> Klesání: %1%2 (%3%) </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="242"/>
+        <source>Changed trackpoints, sacrificed all previous data.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="151"/>
-        <source>Elevation: %1 %2</source>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
+        <source> slope: %1° (%2%)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="159"/>
-        <source>Proximity: %1 %2</source>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="415"/>
+        <source>Dist.: %1%2 (%3%)</source>
+        <translation>Vzdálenost: %1%2 (%3%)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="419"/>
+        <source>Dist.: - (-)</source>
+        <translation>Vzdálenost: - (-)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="425"/>
+        <source> Moving: %1%2 (%3%)</source>
+        <translation> Pohyb: %1%2 (%3%) </translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="94"/>
+        <source>thin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="219"/>
-        <source>Changed name</source>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="95"/>
+        <source>normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="226"/>
-        <source>Changed position</source>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
+        <source>wide</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="232"/>
-        <source>Changed elevation</source>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
+        <source>strong</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="238"/>
-        <source>Changed proximity</source>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="485"/>
+        <source>Changed area shape.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="492"/>
+        <source>Changed name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="498"/>
+        <source>Changed border width.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="504"/>
+        <source>Changed fill pattern.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="510"/>
+        <source>Changed opacity.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="516"/>
+        <source>Changed comment.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="522"/>
+        <source>Changed description.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="534"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1034"/>
+        <source>Changed color</source>
+        <translation>Změněná barva</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="237"/>
+        <source>Elevation: %1 %2</source>
+        <translation>Výška: %1 %2</translation>
+    </message>
+    <message>
         <location filename="../gis/wpt/CGisItemWpt.cpp" line="245"/>
+        <source>Proximity: %1 %2</source>
+        <translation>Blízkost: %1 %2</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1023"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="310"/>
+        <source>Changed name</source>
+        <translation>Změněný název</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
+        <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+        <source>Edit name...</source>
+        <translation>Upravit název...</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <source>Enter new waypoint name.</source>
+        <translation>Zadat nový název pro cestovní bod.</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="317"/>
+        <source>Changed position</source>
+        <translation>Změněná poloha</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="323"/>
+        <source>Changed elevation</source>
+        <translation>Změněná výška</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
+        <source>Changed proximity</source>
+        <translation>Změněná blízkost</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="337"/>
         <source>Changed icon</source>
-        <translation type="unfinished"></translation>
+        <translation>Změněná ikona</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="251"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="343"/>
         <source>Changed comment</source>
-        <translation type="unfinished"></translation>
+        <translation>Změněná poznámka</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="257"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="349"/>
         <source>Changed description</source>
-        <translation type="unfinished"></translation>
+        <translation>Změněný popis</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="300"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="392"/>
         <source>Archived</source>
-        <translation type="unfinished"></translation>
+        <translation>Archivováno</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="304"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="396"/>
         <source>Available</source>
-        <translation type="unfinished"></translation>
+        <translation>Dostupné</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="308"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="400"/>
         <source>Not Available</source>
-        <translation type="unfinished"></translation>
+        <translation>Nedostupné</translation>
     </message>
     <message>
         <location filename="../map/garmin/CGarminTyp.cpp" line="459"/>
         <location filename="../map/garmin/CGarminTyp.cpp" line="834"/>
         <source>Warning...</source>
-        <translation type="unfinished"></translation>
+        <translation>Varování...</translation>
     </message>
     <message>
         <location filename="../map/garmin/CGarminTyp.cpp" line="459"/>
         <source>This is a typ file with unknown polygon encoding. Please report!</source>
-        <translation type="unfinished"></translation>
+        <translation>Toto je souborový typ s neznámým druhem mnohoúhelníku. Nahlašte to, prosím!</translation>
     </message>
     <message>
         <location filename="../map/garmin/CGarminTyp.cpp" line="834"/>
         <source>This is a typ file with unknown polyline encoding. Please report!</source>
+        <translation>Toto je souborový typ s neznámým druhem čáry. Nahlašte to, prosím!</translation>
+    </message>
+    <message>
+        <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
+        <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+        <source>Enter new track name.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
diff --git a/src/locale/qmapshack_de.ts b/src/locale/qmapshack_de.ts
index 540479e..d48f6bb 100644
--- a/src/locale/qmapshack_de.ts
+++ b/src/locale/qmapshack_de.ts
@@ -4,7 +4,7 @@
 <context>
     <name>CCanvas</name>
     <message>
-        <location filename="../canvas/CCanvas.cpp" line="51"/>
+        <location filename="../canvas/CCanvas.cpp" line="58"/>
         <source>Workspace %1</source>
         <translation>Ansicht %1</translation>
     </message>
@@ -77,34 +77,98 @@
     </message>
 </context>
 <context>
+    <name>CDetailsOvlArea</name>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <source>Edit name...</source>
+        <translation type="unfinished">Name ändern...</translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <source>Enter new waypoint name.</source>
+        <translation type="unfinished">Geben Sie einen neuen Namen ein.</translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="222"/>
+        <source><h4>Comment:</h4></source>
+        <translation type="unfinished"><h4>Kommentar:</h4></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="225"/>
+        <source><p>--- no comment ---</p></source>
+        <translation type="unfinished"><p>--- kein Kommentar ---</p></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="232"/>
+        <source><h4>Description:</h4></source>
+        <translation type="unfinished"><h4>Beschreibung:</h4></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="235"/>
+        <source><p>--- no description ---</p></source>
+        <translation type="unfinished"><p>--- keine Beschreibung ---</p></translation>
+    </message>
+</context>
+<context>
+    <name>CDetailsTrk</name>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="145"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="154"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="157"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="163"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="182"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="184"/>
+        <source>%1 %2</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
     <name>CDetailsWpt</name>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="115"/>
         <source>no comment</source>
-        <translation>kein Kommentar vorhanden</translation>
+        <translation type="obsolete">kein Kommentar vorhanden</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="126"/>
         <source>no description</source>
-        <translation>keine Beschreibung vorhanden</translation>
+        <translation type="obsolete">keine Beschreibung vorhanden</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="120"/>
+        <source><h4>Comment:</h4></source>
+        <translation><h4>Kommentar:</h4></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="123"/>
+        <source><p>--- no comment ---</p></source>
+        <translation><p>--- kein Kommentar ---</p></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="130"/>
+        <source><h4>Description:</h4></source>
+        <translation><h4>Beschreibung:</h4></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="133"/>
+        <source><p>--- no description ---</p></source>
+        <translation><p>--- keine Beschreibung ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="167"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
         <source>Edit name...</source>
-        <translation>Namen ändern...</translation>
+        <translation>Name ändern...</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="167"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
         <source>Enter new waypoint name.</source>
         <translation>Geben Sie einen neuen Namen ein.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="177"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="176"/>
         <source>Enter new elevation.</source>
         <translation>Geben Sie eine Höhe ein.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="186"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="185"/>
         <source>Enter new proximity range.</source>
         <translation>Geben Sie einen Abstandsalarm ein.</translation>
     </message>
@@ -112,37 +176,51 @@
 <context>
     <name>CGisListWks</name>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="34"/>
+        <location filename="../gis/CGisListWks.cpp" line="37"/>
         <source>Save</source>
         <translation>Speichern</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="33"/>
+        <location filename="../gis/CGisListWks.cpp" line="36"/>
         <source>Save As...</source>
         <translation>Speichern als...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="35"/>
+        <location filename="../gis/CGisListWks.cpp" line="38"/>
         <source>Close</source>
         <translation>Schließen</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="41"/>
+        <location filename="../gis/CGisListWks.cpp" line="44"/>
         <source>Edit...</source>
         <translation>Ändern...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="42"/>
+        <location filename="../gis/CGisListWks.cpp" line="45"/>
+        <source>Move Waypoint</source>
+        <translation>Wegpunkt verschieben</translation>
+    </message>
+    <message>
         <source>Move Waypoint...</source>
-        <translation>Wegpunkt verschieben...</translation>
+        <translation type="obsolete">Wegpunkt verschieben...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="43"/>
+        <location filename="../gis/CGisListWks.cpp" line="46"/>
         <source>Proj. Waypoint...</source>
-        <translation>Wegpunktprojektion...</translation>
+        <translation>Wegpunkt Projektion...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="44"/>
+        <location filename="../gis/CGisListWks.cpp" line="47"/>
+        <source>Track Profile</source>
+        <translation>Trackprofil</translation>
+    </message>
+    <message>
+        <location filename="../gis/CGisListWks.cpp" line="48"/>
+        <source>Edit Track Points</source>
+        <translation>Wegpunkte bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../gis/CGisListWks.cpp" line="51"/>
         <source>Delete</source>
         <translation>Löschen</translation>
     </message>
@@ -163,12 +241,12 @@
 <context>
     <name>CMainWindow</name>
     <message>
-        <location filename="../CMainWindow.cpp" line="389"/>
+        <location filename="../CMainWindow.cpp" line="420"/>
         <source>Ele: %1%2</source>
         <translation>Höhe: %1%2</translation>
     </message>
     <message>
-        <location filename="../CMainWindow.cpp" line="490"/>
+        <location filename="../CMainWindow.cpp" line="521"/>
         <source>Load GIS Data...</source>
         <translation>Lade GIS Daten...</translation>
     </message>
@@ -183,132 +261,133 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="156"/>
         <source>Unspecified</source>
-        <translation></translation>
+        <translation>Nicht angegeben</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="157"/>
         <source>French</source>
-        <translation></translation>
+        <translation>Französisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="158"/>
         <source>German</source>
-        <translation></translation>
+        <translation>Deutsch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="159"/>
         <source>Dutch</source>
-        <translation></translation>
+        <translation>Niederländisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="160"/>
         <source>English</source>
-        <translation></translation>
+        <translation>Englisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="161"/>
         <source>Italian</source>
-        <translation></translation>
+        <translation>Italienisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="162"/>
         <source>Finnish</source>
-        <translation></translation>
+        <translation>Finnisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="163"/>
         <source>Swedish</source>
-        <translation></translation>
+        <translation>Schwedisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="164"/>
         <source>Spanish</source>
-        <translation></translation>
+        <translation>Spanisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="165"/>
         <source>Basque</source>
-        <translation></translation>
+        <translation>Baskisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="166"/>
         <source>Catalan</source>
-        <translation></translation>
+        <translation>Catalanisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="167"/>
         <source>Galician</source>
-        <translation></translation>
+        <translation>Galizisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="168"/>
         <source>Welsh</source>
+        <translatorcomment>?</translatorcomment>
         <translation></translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="169"/>
         <source>Gaelic</source>
-        <translation></translation>
+        <translation>Gälisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="170"/>
         <source>Danish</source>
-        <translation></translation>
+        <translation>Dänisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="171"/>
         <source>Norwegian</source>
-        <translation></translation>
+        <translation>Norwegisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="172"/>
         <source>Portuguese</source>
-        <translation></translation>
+        <translation>Portugiesisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="173"/>
         <source>Slovak</source>
-        <translation></translation>
+        <translation>Slovakisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="174"/>
         <source>Czech</source>
-        <translation></translation>
+        <translation>Tschechisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="175"/>
         <source>Croatian</source>
-        <translation></translation>
+        <translation>Kroatisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="176"/>
         <source>Hungarian</source>
-        <translation></translation>
+        <translation>Ungarisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="177"/>
         <source>Polish</source>
-        <translation></translation>
+        <translation>Polnisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="178"/>
         <source>Turkish</source>
-        <translation></translation>
+        <translation>Türkisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="179"/>
         <source>Greek</source>
-        <translation></translation>
+        <translation>Griechisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="180"/>
         <source>Slovenian</source>
-        <translation></translation>
+        <translation>Slowenisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="181"/>
         <source>Russian</source>
-        <translation></translation>
+        <translation>Russisch</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="182"/>
@@ -413,17 +492,17 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="258"/>
         <source>Roundabout</source>
-        <translation></translation>
+        <translation>Kreisverkehr</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="259"/>
         <source>Railroad</source>
-        <translation></translation>
+        <translation>Einsenbahn</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="260"/>
         <source>Shoreline</source>
-        <translation></translation>
+        <translation>Küstenlinie</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="261"/>
@@ -444,7 +523,7 @@
         <location filename="../map/CMapIMG.cpp" line="264"/>
         <location filename="../map/CMapIMG.cpp" line="265"/>
         <source>Ferry</source>
-        <translation></translation>
+        <translation>Fähre</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="266"/>
@@ -464,7 +543,7 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="269"/>
         <source>River</source>
-        <translation></translation>
+        <translation>Fluss</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="270"/>
@@ -560,7 +639,7 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="352"/>
         <source>Airport</source>
-        <translation></translation>
+        <translation>Flugplatz</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="353"/>
@@ -580,7 +659,7 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="356"/>
         <source>Hospital</source>
-        <translation></translation>
+        <translation>Krankenhaus</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="357"/>
@@ -610,7 +689,7 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="363"/>
         <source>Cemetery</source>
-        <translation></translation>
+        <translation>Friedhof</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="364"/>
@@ -634,12 +713,12 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="371"/>
         <source>Forest</source>
-        <translation></translation>
+        <translation>Wald</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="372"/>
         <source>Ocean</source>
-        <translation></translation>
+        <translation>Ozean</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="373"/>
@@ -651,7 +730,7 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="374"/>
         <source>Sea</source>
-        <translation></translation>
+        <translation>Meer</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="376"/>
@@ -706,12 +785,12 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="393"/>
         <source>Wetland/Swamp</source>
-        <translation></translation>
+        <translation>Feuchtgebiet/Sumpf</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="394"/>
         <source>Glacier</source>
-        <translation></translation>
+        <translation>Gletscher</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="395"/>
@@ -721,12 +800,12 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="396"/>
         <source>Scrub</source>
-        <translation></translation>
+        <translation>Buschwerk</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="397"/>
         <source>Tundra</source>
-        <translation></translation>
+        <translation>Tundra</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="398"/>
@@ -772,12 +851,12 @@
     <message>
         <location filename="../map/CMapIMG.cpp" line="639"/>
         <source>File is NT format. QMapShack is unable to read map files with NT format: </source>
-        <translation>Die Datei ist in einem neueren Format. QMapShack kann dieses Format nciht lesen:</translation>
+        <translation>Die Datei hat das NT Format. QMapShack kann dieses Format nicht lesen:</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="713"/>
         <source>File contains locked / encypted data. Garmin does not want you to use this file with any other software than the one supplied by Garmin.</source>
-        <translation>Die Datei enthält verschlüsselte Daten. Garmin möchte nicht dass diese Datei mit einer anderen Softare, als der von Garmin bereitgestellten, benützt wird.</translation>
+        <translation>Die Datei enthält verschlüsselte Daten. Garmin möchte nicht dass diese Datei mit einer anderen Software, als der von Garmin bereitgestellten, benützt wird.</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="2363"/>
@@ -789,7 +868,7 @@
         <location filename="../map/CMapIMG.cpp" line="2439"/>
         <location filename="../map/CMapIMG.cpp" line="2444"/>
         <source>Point of Interest</source>
-        <translation>Orte von Interesse</translation>
+        <translation>Ort von Interesse</translation>
     </message>
     <message>
         <location filename="../map/CMapIMG.cpp" line="2569"/>
@@ -818,6 +897,24 @@
     </message>
 </context>
 <context>
+    <name>CMapMAP</name>
+    <message>
+        <location filename="../map/CMapMAP.cpp" line="46"/>
+        <source>Failed ...</source>
+        <translation>Fehlgeschlagen...</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapMAP.cpp" line="65"/>
+        <source>Failed to open: </source>
+        <translation>Öffnen fehlgeschlagen: </translation>
+    </message>
+    <message>
+        <location filename="../map/CMapMAP.cpp" line="75"/>
+        <source>Bad file format: </source>
+        <translation>Falsches Dateiformat: </translation>
+    </message>
+</context>
+<context>
     <name>CMapPathSetup</name>
     <message>
         <location filename="../map/CMapPathSetup.cpp" line="39"/>
@@ -831,6 +928,14 @@
     </message>
 </context>
 <context>
+    <name>CMapPropSetup</name>
+    <message>
+        <location filename="../map/CMapPropSetup.cpp" line="151"/>
+        <source>Cache path...</source>
+        <translation>Cache Pfad...</translation>
+    </message>
+</context>
+<context>
     <name>CMapRMAP</name>
     <message>
         <location filename="../map/CMapRMAP.cpp" line="47"/>
@@ -901,6 +1006,146 @@
     </message>
 </context>
 <context>
+    <name>CMapWMTS</name>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="44"/>
+        <location filename="../map/CMapWMTS.cpp" line="54"/>
+        <location filename="../map/CMapWMTS.cpp" line="64"/>
+        <location filename="../map/CMapWMTS.cpp" line="73"/>
+        <location filename="../map/CMapWMTS.cpp" line="188"/>
+        <source>Error...</source>
+        <translation>Fehler...</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="44"/>
+        <source>Failed to open %1</source>
+        <translation>Öffnen fehlgeschlagen: %1</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="54"/>
+        <source>Failed to read: %1
+line %2, column %3:
+ %4</source>
+        <translation>Lesen fehlgeschlagen: %1
+Zeile %2, Spalte %3:
+%4</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="64"/>
+        <source>Failed to read: %1
+Unknown structure.</source>
+        <translation>Lesen fehlgeschlagen: %1
+Unbekannte Struktur.</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="73"/>
+        <source>Unexpexted service. '* WMTS 1.0.0' is expected. '%1 %2' is read.</source>
+        <translation>Unerwarteter Dienst. '* WMTS 1.0.0' wird erwartet. '%1 %2' wurde gelesen.</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="243"/>
+        <source>--- All ---</source>
+        <translation>--- Alle ---</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="323"/>
+        <source>%1: %2 tiles pending</source>
+        <translation>%1: %2 unerledigte Kacheln</translation>
+    </message>
+    <message>
+        <source>Unexpexted service. 'OGC WMTS 1.0.0' is expected. '%1 %2' is read.</source>
+        <translation type="obsolete">Unerwarterter Dienst. 'OGC WMTS 1.0.0' Wird erwartet. '%1 %2' wird gelesen.</translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="188"/>
+        <source>No georeference information found.</source>
+        <translation>Keine Georeferenzierung gefunden.</translation>
+    </message>
+</context>
+<context>
+    <name>CMouseEditLine</name>
+    <message>
+        <source>Warning!</source>
+        <translation type="obsolete">Warnung!</translation>
+    </message>
+    <message>
+        <source>This will replace all data of the orignal by a simple line of coordinates. All other data will be lost permanently.</source>
+        <translation type="obsolete">Alle ursprünglichen Daten werden durch eine einfache Koordinatenlinie ersetzt. Alle anderen Daten sind dauerhaft verloren.</translation>
+    </message>
+</context>
+<context>
+    <name>CMouseNormal</name>
+    <message>
+        <location filename="../mouse/CMouseNormal.cpp" line="41"/>
+        <source>Add Waypoint</source>
+        <translation>Wegpunkt hinzufügen</translation>
+    </message>
+    <message>
+        <location filename="../mouse/CMouseNormal.cpp" line="42"/>
+        <source>Add Track</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/CMouseNormal.cpp" line="43"/>
+        <source>Add Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CPlotDistance</name>
+    <message>
+        <location filename="../plot/CPlotDistance.cpp" line="55"/>
+        <source>distance [%1]</source>
+        <translation>Entfernung [%1]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotDistance.cpp" line="59"/>
+        <source>time [h]</source>
+        <translation>Zeit [h]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotDistance.cpp" line="61"/>
+        <source>distance. [%1]</source>
+        <translation>Entfernung [%1]</translation>
+    </message>
+</context>
+<context>
+    <name>CPlotProfile</name>
+    <message>
+        <location filename="../plot/CPlotProfile.cpp" line="67"/>
+        <source>distance [%1]</source>
+        <translation>Entfernung [%1]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotProfile.cpp" line="71"/>
+        <source>time [h]</source>
+        <translation>Zeit [h]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotProfile.cpp" line="73"/>
+        <source>alt. [%1]</source>
+        <translation>Höhe [%1]</translation>
+    </message>
+</context>
+<context>
+    <name>CPlotSpeed</name>
+    <message>
+        <location filename="../plot/CPlotSpeed.cpp" line="54"/>
+        <source>distance [%1]</source>
+        <translation>Entfernung [%1]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotSpeed.cpp" line="58"/>
+        <source>time [h]</source>
+        <translation>Zeit [h]</translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotSpeed.cpp" line="60"/>
+        <source>speed. [%1]</source>
+        <translation>Geschwindigkeit [%1]</translation>
+    </message>
+</context>
+<context>
     <name>CProjWizard</name>
     <message>
         <location filename="../grid/CProjWizard.cpp" line="55"/>
@@ -934,7 +1179,7 @@ ist keine gültige Koordinatensystemdefinition:
     <message>
         <location filename="../gis/wpt/CProjWpt.cpp" line="63"/>
         <source>Edit name...</source>
-        <translation>Namen ändern...</translation>
+        <translation>Name ändern...</translation>
     </message>
     <message>
         <location filename="../gis/wpt/CProjWpt.cpp" line="63"/>
@@ -947,7 +1192,7 @@ ist keine gültige Koordinatensystemdefinition:
     <message>
         <location filename="../helpers/CTextEditWidget.cpp" line="73"/>
         <source>&Color...</source>
-        <translation>Farbe</translation>
+        <translation>Farbe...</translation>
     </message>
 </context>
 <context>
@@ -958,40 +1203,40 @@ ist keine gültige Koordinatensystemdefinition:
         <translation>Über...</translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="38"/>
+        <location filename="../IAbout.ui" line="43"/>
         <source><b>QMapShack</b>, Version</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="45"/>
-        <location filename="../IAbout.ui" line="73"/>
-        <location filename="../IAbout.ui" line="87"/>
-        <location filename="../IAbout.ui" line="101"/>
+        <location filename="../IAbout.ui" line="50"/>
+        <location filename="../IAbout.ui" line="94"/>
+        <location filename="../IAbout.ui" line="108"/>
+        <location filename="../IAbout.ui" line="122"/>
         <source>TextLabel</source>
-        <translation></translation>
+        <translation>Bezeichnung</translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="66"/>
+        <location filename="../IAbout.ui" line="87"/>
         <source>Qt</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="80"/>
+        <location filename="../IAbout.ui" line="101"/>
         <source>GDAL</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="94"/>
+        <location filename="../IAbout.ui" line="115"/>
         <source>Proj4</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="117"/>
+        <location filename="../IAbout.ui" line="138"/>
         <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">
-        <location filename="../IAbout.ui" line="124"/>
+        <location filename="../IAbout.ui" line="145"/>
         <source>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</source>
         <translation></translation>
     </message>
@@ -1038,36 +1283,37 @@ ist keine gültige Koordinatensystemdefinition:
     <message>
         <location filename="../dem/IDemPropSetup.ui" line="14"/>
         <source>Form</source>
+        <translatorcomment>?</translatorcomment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="35"/>
+        <location filename="../dem/IDemPropSetup.ui" line="20"/>
         <source><html><head/><body><p>Change opacity of map</p></body></html></source>
-        <translation><html><head/><body><p>Ändern Sie die transparenz der Karte</p></body></html></translation>
+        <translation><html><head/><body><p>Ändern Sie die Transparenz der Karte</p></body></html></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="47"/>
+        <location filename="../dem/IDemPropSetup.ui" line="32"/>
         <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="50"/>
-        <location filename="../dem/IDemPropSetup.ui" line="87"/>
+        <location filename="../dem/IDemPropSetup.ui" line="35"/>
+        <location filename="../dem/IDemPropSetup.ui" line="72"/>
         <source>...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="71"/>
+        <location filename="../dem/IDemPropSetup.ui" line="56"/>
         <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 Si die beiden Knöpfe links und rechts um die minimale und maximale Skalierung einzustellen.</p></body></html></translation>
+        <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="../dem/IDemPropSetup.ui" line="84"/>
+        <location filename="../dem/IDemPropSetup.ui" line="69"/>
         <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="110"/>
+        <location filename="../dem/IDemPropSetup.ui" line="97"/>
         <source>Hillshading</source>
         <translation>Schummerung</translation>
     </message>
@@ -1077,22 +1323,23 @@ ist keine gültige Koordinatensystemdefinition:
     <message>
         <location filename="../dem/IDemList.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
     </message>
     <message>
         <location filename="../dem/IDemList.ui" line="118"/>
         <source>To add files with elevation data use File->Setup DEM Paths. </source>
-        <translation type="unfinished"></translation>
+        <translation>Um Dateien mit Höhendaten zuzufügen -> Menü Datei - DEM Verzeichnisse angeben.</translation>
     </message>
     <message>
         <location filename="../dem/IDemList.ui" line="131"/>
         <source>Use the context menu (right mouse button click on entry) to activate a file. Use drag-n-drop to move the activated file in the process order. </source>
-        <translation type="unfinished"></translation>
+        <translation>Nutze das Kontextmenü ( Klick mit rechter Maustaste auf Eintrag), um eine Datei zu aktivieren. Nutze Ziehen u. Ablegen um die aktivierte Datei in der Reihenfolge der Ansicht zu verschieben.</translation>
     </message>
     <message>
         <location filename="../dem/IDemList.ui" line="156"/>
         <source>Activate</source>
-        <translation type="unfinished">Aktivieren</translation>
+        <translation>Aktivieren</translation>
     </message>
 </context>
 <context>
@@ -1150,151 +1397,292 @@ ist keine gültige Koordinatensystemdefinition:
     </message>
 </context>
 <context>
-    <name>IDetailsWpt</name>
+    <name>IDetailsOvlArea</name>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="14"/>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="14"/>
         <source>Dialog</source>
-        <translation></translation>
+        <translation type="unfinished">Dialog</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="47"/>
-        <source><html><head/><body><p>Edit description.</p></body></html></source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="37"/>
+        <source>-</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="50"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="179"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="247"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="273"/>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="75"/>
         <source>...</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="80"/>
-        <source>Position:</source>
-        <translation>Position:</translation>
-    </message>
-    <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="87"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="113"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="139"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="203"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="311"/>
-        <source>-</source>
-        <translation></translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="100"/>
-        <source>Ele.</source>
-        <translation>Höhe</translation>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="105"/>
+        <source>Color</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="126"/>
-        <source>Proximity:</source>
-        <translation>Abstand</translation>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="126"/>
+        <source>Border width</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="176"/>
-        <source><html><head/><body><p>Edit comment.</p></body></html></source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="140"/>
+        <source>Style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="228"/>
-        <source><html><head/><body><p>The waypoint was imported to QMapShack and was changed. It does not show the original data anymore. Please see history for changes. </p></body></html></source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="159"/>
+        <source>Opacity</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="244"/>
-        <source><html><head/><body><p>Read Only Mode</p></body></html></source>
-        <translation><html><head/><body><p>Schreibshutz</p></body></html></translation>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="179"/>
+        <source>Points</source>
+        <translation type="unfinished">Punkte</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="304"/>
-        <source>Date/Time:</source>
-        <translation>Datum/Zeit:</translation>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="206"/>
+        <source>Position</source>
+        <translation type="unfinished">Position</translation>
     </message>
-</context>
-<context>
-    <name>IGisItem</name>
     <message>
-        <source>Read Only Mode...</source>
-        <translation type="obsolete">Schreibgeschützt...</translation>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="215"/>
+        <source>Hist.</source>
+        <translation type="unfinished">Hist.</translation>
     </message>
 </context>
 <context>
-    <name>IGisWidget</name>
+    <name>IDetailsTrk</name>
     <message>
-        <location filename="../gis/IGisWidget.ui" line="14"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="14"/>
         <source>Form</source>
+        <translatorcomment>?</translatorcomment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/IGisWidget.ui" line="53"/>
-        <source>State</source>
-        <translation>Status</translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="28"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="49"/>
+        <source>-
+-</source>
+        <translation></translation>
     </message>
-</context>
-<context>
-    <name>IGridSetup</name>
     <message>
-        <location filename="../grid/IGridSetup.ui" line="14"/>
-        <source>Setup Grid...</source>
-        <translation>Gitter einstellen...</translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="117"/>
+        <source>Profile</source>
+        <translation>Profil</translation>
     </message>
     <message>
-        <location filename="../grid/IGridSetup.ui" line="22"/>
-        <source>Projection</source>
-        <translation>Projektion</translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="124"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="221"/>
+        <source>Speed</source>
+        <translation>Geschw.</translation>
     </message>
     <message>
-        <location filename="../grid/IGridSetup.ui" line="37"/>
-        <source>restore default</source>
-        <translation>Grundeinstellung wiederherstellen</translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="131"/>
+        <source>Progress</source>
+        <translatorcomment>?</translatorcomment>
+        <translation>Verlauf</translation>
     </message>
     <message>
-        <location filename="../grid/IGridSetup.ui" line="40"/>
-        <location filename="../grid/IGridSetup.ui" line="66"/>
-        <location filename="../grid/IGridSetup.ui" line="92"/>
-        <location filename="../grid/IGridSetup.ui" line="146"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="148"/>
         <source>...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../grid/IGridSetup.ui" line="63"/>
-        <source>Get projection from current map.</source>
-        <translation>Projektion aus der aktuellen Karte nehmen.</translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="201"/>
+        <source>Time</source>
+        <translation>Zeit</translation>
     </message>
     <message>
-        <location filename="../grid/IGridSetup.ui" line="89"/>
-        <source>projection wizzard</source>
-        <translation>Projektionshilfe</translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="206"/>
+        <source>Ele.</source>
+        <translation>Höhe</translation>
     </message>
     <message>
-        <location filename="../grid/IGridSetup.ui" line="130"/>
-        <source>Grid color</source>
-        <translation>Gitterfarbe</translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="211"/>
+        <source>Delta</source>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
     </message>
     <message>
-        <location filename="../grid/IGridSetup.ui" line="143"/>
-        <source>setup grid color</source>
-        <translation>Gitterfarbe einstellen</translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="216"/>
+        <source>Dist.</source>
+        <translation>Entf.</translation>
     </message>
-</context>
-<context>
-    <name>IInputDialog</name>
     <message>
-        <location filename="../helpers/IInputDialog.ui" line="14"/>
-        <source>Edit...</source>
-        <translation>Ändern...</translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="226"/>
+        <source>Slope</source>
+        <translation>Neigung</translation>
     </message>
     <message>
-        <location filename="../helpers/IInputDialog.ui" line="20"/>
-        <source>TextLabel</source>
-        <translation></translation>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="231"/>
+        <source>Ascend</source>
+        <translation>Anstieg</translation>
     </message>
-</context>
-<context>
-    <name>IMainWindow</name>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="236"/>
+        <source>Descend</source>
+        <translation>Abstieg</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="241"/>
+        <source>Position</source>
+        <translation>Position</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="261"/>
+        <source>Info</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="291"/>
+        <source>-</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="302"/>
+        <source>Hist.</source>
+        <translation>Hist.</translation>
+    </message>
+    <message>
+        <source>TextLabel</source>
+        <translation type="obsolete">Bezeichnung</translation>
+    </message>
+</context>
+<context>
+    <name>IDetailsWpt</name>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="14"/>
+        <source>Dialog</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source><html><head/><body><p>Edit comment.</p></body></html></source>
+        <translation type="obsolete"><html><head/><body><p>Kommentar bearbeiten.</p></body></html></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="233"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="259"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="214"/>
+        <source><html><head/><body><p>The waypoint was imported to QMapShack and was changed. It does not show the original data anymore. Please see history for changes. </p></body></html></source>
+        <translation><html><head/><body><p>Der Wegpunkt wurde in QMapShack importiert und geändert. Die ursprünglichen Daten weren nicht mehr angezeigt. Näheres siehe Änderungshistorie.</p></body></html></translation>
+    </message>
+    <message>
+        <source><html><head/><body><p>Edit description.</p></body></html></source>
+        <translation type="obsolete"><html><head/><body><p>Beschreibung bearbeiten.</p></body></html></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="49"/>
+        <source>Position:</source>
+        <translation>Position:</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="56"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="82"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="108"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="155"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="189"/>
+        <source>-</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="69"/>
+        <source>Ele.</source>
+        <translation>Höhe</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="95"/>
+        <source>Proximity:</source>
+        <translation>Abstand:</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="230"/>
+        <source><html><head/><body><p>Read Only Mode</p></body></html></source>
+        <translation><html><head/><body><p>Schreibschutz</p></body></html></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="148"/>
+        <source>Date/Time:</source>
+        <translation>Datum/Zeit:</translation>
+    </message>
+</context>
+<context>
+    <name>IGisWidget</name>
+    <message>
+        <location filename="../gis/IGisWidget.ui" line="14"/>
+        <source>Form</source>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/IGisWidget.ui" line="59"/>
+        <source>State</source>
+        <translation>Status</translation>
+    </message>
+</context>
+<context>
+    <name>IGridSetup</name>
+    <message>
+        <location filename="../grid/IGridSetup.ui" line="14"/>
+        <source>Setup Grid...</source>
+        <translation>Gitter einstellen...</translation>
+    </message>
+    <message>
+        <location filename="../grid/IGridSetup.ui" line="22"/>
+        <source>Projection</source>
+        <translation>Projektion</translation>
+    </message>
+    <message>
+        <location filename="../grid/IGridSetup.ui" line="37"/>
+        <source>restore default</source>
+        <translation>Grundeinstellung wiederherstellen</translation>
+    </message>
+    <message>
+        <location filename="../grid/IGridSetup.ui" line="40"/>
+        <location filename="../grid/IGridSetup.ui" line="66"/>
+        <location filename="../grid/IGridSetup.ui" line="92"/>
+        <location filename="../grid/IGridSetup.ui" line="146"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../grid/IGridSetup.ui" line="63"/>
+        <source>Get projection from current map.</source>
+        <translation>Projektion aus der aktuellen Karte nehmen.</translation>
+    </message>
+    <message>
+        <location filename="../grid/IGridSetup.ui" line="89"/>
+        <source>projection wizzard</source>
+        <translation>Projektionshilfe</translation>
+    </message>
+    <message>
+        <location filename="../grid/IGridSetup.ui" line="130"/>
+        <source>Grid color</source>
+        <translation>Gitterfarbe</translation>
+    </message>
+    <message>
+        <location filename="../grid/IGridSetup.ui" line="143"/>
+        <source>setup grid color</source>
+        <translation>Gitterfarbe einstellen</translation>
+    </message>
+</context>
+<context>
+    <name>IInputDialog</name>
+    <message>
+        <location filename="../helpers/IInputDialog.ui" line="14"/>
+        <source>Edit...</source>
+        <translation>Ändern...</translation>
+    </message>
+    <message>
+        <location filename="../helpers/IInputDialog.ui" line="20"/>
+        <source>TextLabel</source>
+        <translation>Bezeichnung</translation>
+    </message>
+</context>
+<context>
+    <name>IMainWindow</name>
     <message>
         <location filename="../IMainWindow.ui" line="14"/>
         <source>QMapShack</source>
@@ -1419,7 +1807,7 @@ ist keine gültige Koordinatensystemdefinition:
     <message>
         <location filename="../IMainWindow.ui" line="339"/>
         <source>Setup Map Workspace</source>
-        <translation>Ansicht einstellen</translation>
+        <translation>Kartenansicht einstellen</translation>
     </message>
     <message>
         <location filename="../IMainWindow.ui" line="348"/>
@@ -1462,22 +1850,27 @@ ist keine gültige Koordinatensystemdefinition:
     <message>
         <location filename="../map/IMapList.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
     </message>
     <message>
-        <location filename="../map/IMapList.ui" line="100"/>
         <source>To add maps use File->Setup Map Pathss. </source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Um Karten zuzufügen -> Menü Datei - Kartenverzeichnisse angeben.</translation>
+    </message>
+    <message>
+        <location filename="../map/IMapList.ui" line="103"/>
+        <source>To add maps use File->Setup Map Paths. </source>
+        <translation>Um Karten zuzufügen: Menü - Datei - Kartenverzeichnisse angeben.</translation>
     </message>
     <message>
-        <location filename="../map/IMapList.ui" line="113"/>
+        <location filename="../map/IMapList.ui" line="116"/>
         <source>Use the context menu (right mouse button click on entry) to activate a map. Use drag-n-drop to move the activated map in the draw order. </source>
-        <translation type="unfinished"></translation>
+        <translation>Nutze das Kontextmenü ( Klick mit rechter Maustaste auf Eintrag), um eine Karte zu aktivieren. Nutze Ziehen u. Ablegen um die aktivierte Datei in der Reihenfolge der Ansicht zu verschieben.</translation>
     </message>
     <message>
-        <location filename="../map/IMapList.ui" line="138"/>
+        <location filename="../map/IMapList.ui" line="141"/>
         <source>Activate</source>
-        <translation type="unfinished">Aktivieren</translation>
+        <translation>Aktivieren</translation>
     </message>
 </context>
 <context>
@@ -1504,33 +1897,35 @@ ist keine gültige Koordinatensystemdefinition:
     <message>
         <location filename="../map/IMapPropSetup.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
     </message>
     <message>
         <location filename="../map/IMapPropSetup.ui" line="35"/>
         <source><html><head/><body><p>Change opacity of map</p></body></html></source>
-        <translation type="unfinished"><html><head/><body><p>Ändern Sie die transparenz der Karte</p></body></html></translation>
+        <translation><html><head/><body><p>Ändern Sie die Transparenz der Karte</p></body></html></translation>
     </message>
     <message>
         <location filename="../map/IMapPropSetup.ui" line="47"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
-        <translation type="unfinished"><html><head/><body><p>Klicken um die aktuelle Skalierung als minimale Skalierung zu benutzen.</p></body></html></translation>
+        <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"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="../map/IMapPropSetup.ui" line="71"/>
         <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 type="unfinished"><html><head/><body><p>Stellen sie den Skalierungsbereich ein, in dem die Karte sichtbar ist. Benutzen Si die beiden Knöpfe links und rechts um die minimale und maximale Skalierung einzustellen.</p></body></html></translation>
+        <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"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
-        <translation type="unfinished"><html><head/><body><p>Klicken um die aktuelle Skalierung als maximale Skalierung zu benutzen.</p></body></html></translation>
+        <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"/>
@@ -1547,6 +1942,52 @@ ist keine gültige Koordinatensystemdefinition:
         <source>Points</source>
         <translation>Punkte</translation>
     </message>
+    <message>
+        <location filename="../map/IMapPropSetup.ui" line="184"/>
+        <source>-</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../map/IMapPropSetup.ui" line="208"/>
+        <source>Cache Size (MB)</source>
+        <translation>Cache (MB)</translation>
+    </message>
+    <message>
+        <location filename="../map/IMapPropSetup.ui" line="228"/>
+        <source>Expiration (Days)</source>
+        <translation>Verfallzeit (Tage)</translation>
+    </message>
+</context>
+<context>
+    <name>IMouseEditLine</name>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+        <source>Add points?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+        <source>Add points to temporary line?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+        <source>Warning!</source>
+        <translation>Warnung!</translation>
+    </message>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+        <source>This will replace all data of the orignal by a simple line of coordinates. All other data will be lost permanently.</source>
+        <translation>Alle ursprünglichen Daten werden durch eine einfache Koordinatenlinie ersetzt. Alle anderen Daten sind dauerhaft verloren.</translation>
+    </message>
+</context>
+<context>
+    <name>IPlot</name>
+    <message>
+        <location filename="../plot/IPlot.cpp" line="465"/>
+        <source>No or bad data.</source>
+        <translation>Keine oder schlechte Daten.</translation>
+    </message>
 </context>
 <context>
     <name>IPositionDialog</name>
@@ -1636,7 +2077,7 @@ sein</translation>
     <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="14"/>
         <source>Waypoint Projection</source>
-        <translation>Wegpunktprojektion</translation>
+        <translation>Wegpunkt Projektion</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="22"/>
@@ -1651,7 +2092,7 @@ sein</translation>
     <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="47"/>
         <source>Clone waypoint and move by:</source>
-        <translation>Den Wegpunk klonen und verschieben um:</translation>
+        <translation>Wegpunkt kopieren und verschieben um:</translation>
     </message>
     <message>
         <location filename="../gis/wpt/IProjWpt.ui" line="59"/>
@@ -1665,32 +2106,139 @@ sein</translation>
     </message>
 </context>
 <context>
+    <name>IScrOptEditLine</name>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="26"/>
+        <source>Form</source>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="50"/>
+        <source>Save to orignal</source>
+        <translation>Ins Original speichern</translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="57"/>
+        <source>Save as new</source>
+        <translation>Als neu speichern</translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="64"/>
+        <source>Abort</source>
+        <translation>Abbrechen</translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptOvlArea</name>
+    <message>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="14"/>
+        <source>Form</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="40"/>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="51"/>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="69"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="98"/>
+        <source>TextLabel</source>
+        <translation>Bezeichnung</translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptPoint</name>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="14"/>
+        <source>Form</source>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="35"/>
+        <source>Delete point.</source>
+        <translation>Punkt löschen.</translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="38"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="52"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="66"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="80"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="94"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="49"/>
+        <source>Select a range of points.</source>
+        <translation>Punktebereich wählen.</translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="63"/>
+        <source>Move selected point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="77"/>
+        <source>Add points before the selected point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="91"/>
+        <source>Add points after the selected point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptRange</name>
+    <message>
+        <location filename="../mouse/IScrOptRange.ui" line="14"/>
+        <source>Form</source>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptRange.ui" line="32"/>
+        <source>Delete selected range of points.</source>
+        <translation>Gewählten Punktebereich löschen.</translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptRange.ui" line="35"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
     <name>IScrOptRte</name>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
     </message>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="28"/>
         <source><html><head/><body><p>View details &amp; Edit</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Details anzeigen &amp; Bearbeiten</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="31"/>
         <location filename="../gis/rte/IScrOptRte.ui" line="45"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="42"/>
         <source><html><head/><body><p>Delete</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Löschen</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="71"/>
         <source>TextLabel</source>
-        <translation type="unfinished"></translation>
+        <translation>Bezeichnung</translation>
     </message>
 </context>
 <context>
@@ -1698,28 +2246,71 @@ sein</translation>
     <message>
         <location filename="../gis/trk/IScrOptTrk.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="40"/>
+        <source>View details &amp; Edit properties of track.</source>
+        <translation>Detailansicht &amp; Trackeigenschaften bearbeiten.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+        <source>Delete</source>
+        <translation>Löschen</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="75"/>
+        <source>Show on-screen profile and detailed information about points.</source>
+        <translation>Zeigt das Profil und detaillierte Informationen der Punkte.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+        <source>Cut track at selected point into two tracks.</source>
+        <translation>Teilt den Track am selektierten Punkt in zwei Teile.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+        <source>Edit position of track points.</source>
+        <translation>Position von Trackpunkten bearbeiten.</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
         <source><html><head/><body><p>View details &amp; Edit</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete"><html><head/><body><p>Details anzeigen &amp; Bearbeiten</p></body></html></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="46"/>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="60"/>
-        <source>...</source>
-        <translation type="unfinished"></translation>
+        <source><html><head/><body><p>View details &amp; Edit properties of track.</p></body></html></source>
+        <translation type="obsolete"><html><head/><body><p>Detailansicht &amp; Trackeigenschaften bearbeiten..</p></body></html></translation>
     </message>
     <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
         <location filename="../gis/trk/IScrOptTrk.ui" line="57"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="78"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="95"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="109"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+    <message>
         <source><html><head/><body><p>Delete</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete"><html><head/><body><p>Löschen</p></body></html></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="86"/>
+        <source><html><head/><body><p>Show on-screen profile and detailed information about points.</p></body></html></source>
+        <translation type="obsolete"><html><head/><body><p>Zeigt das Profil und detaillierte Informationen der Punkte.</p></body></html></translation>
+    </message>
+    <message>
+        <source><html><head/><body><p>Cut track at selected point into two tracks.</p></body></html></source>
+        <translation type="obsolete"><html><head/><body><p>Teilt den Track am selektierten Punkt in zwei Teile.</p></body></html></translation>
+    </message>
+    <message>
+        <source><html><head/><body><p>Edit position of track points.</p></body></html></source>
+        <translation type="obsolete"><html><head/><body><p>Bearbeiten der Position von Trackpunkten.</p></body></html></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="135"/>
         <source>TextLabel</source>
-        <translation type="unfinished"></translation>
+        <translation>Bezeichnung</translation>
     </message>
 </context>
 <context>
@@ -1727,12 +2318,13 @@ sein</translation>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="20"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="49"/>
         <source><html><head/><body><p>View details &amp; Edit</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Details anzeigen &amp; Bearbeiten</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="52"/>
@@ -1740,35 +2332,53 @@ sein</translation>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="87"/>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="101"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="63"/>
         <source><html><head/><body><p>Delete</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Löschen</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="84"/>
         <source><html><head/><body><p>Move waypoint to a new location.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Wegpunkt verschieben.</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="98"/>
         <source><html><head/><body><p>Clone waypoint and move clone a given distance and angle.</p></body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><head/><body><p>Wegpunkt kopieren und unter Angabe von Entfernung und Winkel verschieben.</p></body></html></translation>
     </message>
     <message>
         <location filename="../gis/wpt/IScrOptWpt.ui" line="145"/>
         <source>TextLabel</source>
+        <translation>Bezeichnung</translation>
+    </message>
+</context>
+<context>
+    <name>ISelectProjectDialog</name>
+    <message>
+        <source>Dialog</source>
+        <translation type="obsolete">Dialog</translation>
+    </message>
+    <message>
+        <location filename="../helpers/ISelectProjectDialog.ui" line="14"/>
+        <source>Select a project...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../helpers/ISelectProjectDialog.ui" line="20"/>
+        <source>Select project from list or enter new project name.</source>
+        <translation>Wähle ein Projekt aus der Liste oder gib einen neuen Projektnamen ein.</translation>
+    </message>
 </context>
 <context>
     <name>ITextEditWidget</name>
     <message>
         <location filename="../helpers/ITextEditWidget.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished"></translation>
+        <translatorcomment>?</translatorcomment>
+        <translation></translation>
     </message>
     <message>
         <location filename="../helpers/ITextEditWidget.ui" line="25"/>
@@ -1776,136 +2386,136 @@ sein</translation>
         <location filename="../helpers/ITextEditWidget.ui" line="51"/>
         <location filename="../helpers/ITextEditWidget.ui" line="64"/>
         <location filename="../helpers/ITextEditWidget.ui" line="77"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="117"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="130"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="143"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="156"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="97"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="110"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="123"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="136"/>
         <location filename="../helpers/ITextEditWidget.ui" line="169"/>
         <location filename="../helpers/ITextEditWidget.ui" line="182"/>
         <location filename="../helpers/ITextEditWidget.ui" line="195"/>
         <location filename="../helpers/ITextEditWidget.ui" line="208"/>
         <source>...</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="259"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="263"/>
         <source>Undo</source>
-        <translation type="unfinished"></translation>
+        <translation>Rückgängig</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="262"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="266"/>
         <source>Ctrl+Z</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+Z</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="271"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="275"/>
         <source>Redo</source>
-        <translation type="unfinished"></translation>
+        <translation>Wiederherstellen</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="274"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="278"/>
         <source>Ctrl+Shift+Z</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+Shift+Z</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="283"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="287"/>
         <source>Cut</source>
-        <translation type="unfinished"></translation>
+        <translation>Ausschneiden</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="286"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="290"/>
         <source>Ctrl+X</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+X</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="295"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="299"/>
         <source>Copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Kopieren</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="298"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="302"/>
         <source>Ctrl+C</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+C</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="307"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="311"/>
         <source>Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>Einfügen</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="310"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="314"/>
         <source>Ctrl+V</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+V</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="322"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="326"/>
         <source>Align Left</source>
-        <translation type="unfinished"></translation>
+        <translation>Linksbündig</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="325"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="329"/>
         <source>Ctrl+L</source>
-        <translation type="unfinished">Ctrl+L</translation>
+        <translation>Strg+L</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="337"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="341"/>
         <source>Align Right</source>
-        <translation type="unfinished"></translation>
+        <translation>Rechtsbündig</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="340"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="344"/>
         <source>Ctrl+R</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+R</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="352"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="356"/>
         <source>Align Center</source>
-        <translation type="unfinished"></translation>
+        <translation>Zentriert</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="355"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="359"/>
         <source>Ctrl+E</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+E</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="367"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="371"/>
         <source>Align Block</source>
-        <translation type="unfinished"></translation>
+        <translation>Blocksatz</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="370"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="374"/>
         <source>Ctrl+J</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+J</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="382"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="386"/>
         <source>Underline</source>
-        <translation type="unfinished"></translation>
+        <translation>Unterstreichen</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="385"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="389"/>
         <source>Ctrl+U</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+U</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="397"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="401"/>
         <source>Bold</source>
-        <translation type="unfinished"></translation>
+        <translation>Fett</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="400"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="404"/>
         <source>Ctrl+B</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+B</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="412"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="416"/>
         <source>Italic</source>
-        <translation type="unfinished"></translation>
+        <translation>Kursiv</translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="415"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="419"/>
         <source>Ctrl+I</source>
-        <translation type="unfinished"></translation>
+        <translation>Strg+I</translation>
     </message>
 </context>
 <context>
@@ -1952,13 +2562,13 @@ sein</translation>
         <translation>Falsches Positionsformat. Richtig: [N|S] ddd mm.sss [W|E] ddd mm.sss </translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="63"/>
-        <location filename="../gis/CGisProject.cpp" line="72"/>
+        <location filename="../gis/CGisProject.cpp" line="77"/>
+        <location filename="../gis/CGisProject.cpp" line="86"/>
         <source>Failed to read...</source>
         <translation>Lesen fehlgeschlagen...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="63"/>
+        <location filename="../gis/CGisProject.cpp" line="77"/>
         <source>Failed to read: %1
 line %2, column %3:
  %4</source>
@@ -1967,149 +2577,288 @@ Zeile %2, Spalte %3:
 %4</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="72"/>
+        <location filename="../gis/CGisProject.cpp" line="86"/>
         <source>Not a GPX file: </source>
         <translation>Keien GPX Datei:</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="339"/>
+        <location filename="../gis/CGisProject.cpp" line="367"/>
         <source>Are you sure you want to delete '%1' from project '%2'?</source>
         <translation>Sind Sie sicher, dass Sie '%1' aus dem Projekt '%2' löschen wollen? </translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="340"/>
+        <location filename="../gis/CGisProject.cpp" line="368"/>
         <source>Delete...</source>
         <translation>Löschen...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="432"/>
+        <location filename="../gis/CGisProject.cpp" line="485"/>
         <source>Save GIS data to...</source>
         <translation>GIS Daten speichern in...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="484"/>
+        <location filename="../gis/CGisProject.cpp" line="537"/>
         <source>File exists ...</source>
         <translation>Datei existiert...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="485"/>
+        <location filename="../gis/CGisProject.cpp" line="538"/>
         <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 type="unfinished"></translation>
+        <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/CGisProject.cpp" line="538"/>
+        <location filename="../gis/CGisProject.cpp" line="604"/>
         <source>Failed to create file '%1'</source>
-        <translation>Die Datei konnte nicht erstellt werden: %1</translation>
+        <translation>Datei %1' konnte nicht erstellt werden</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="538"/>
-        <location filename="../gis/CGisProject.cpp" line="548"/>
+        <location filename="../gis/CGisProject.cpp" line="604"/>
+        <location filename="../gis/CGisProject.cpp" line="614"/>
         <source>Saveing GIS data failed...</source>
-        <translation>Das Speichern der GIS Daten schlug fehl...</translation>
+        <translation>Speichern der GIS DAten fehlgeschlagen...</translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="548"/>
+        <location filename="../gis/CGisProject.cpp" line="614"/>
         <source>Failed to write file '%1'</source>
-        <translation>Die Datei konnte nicht geladen werden: %1</translation>
+        <translation>Datei %1' konnte nicht gespeichert werden</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="135"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="242"/>
+        <source>Changed trackpoints, sacrificed all previous data.</source>
+        <translatorcomment>?</translatorcomment>
+        <translation>Geänderte Wegpunkte, alle vorherigen Daten sind verloren.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="319"/>
         <source>Length: %1 %2</source>
         <translation>Länge: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="142"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="326"/>
         <source>, %1%2 %3, %4%5 %6</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="150"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="334"/>
         <source>Time: %1</source>
         <translation>Zeit: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="153"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="163"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="337"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="347"/>
         <source>, Speed: %1 %2</source>
         <translation>, Geschw.: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="160"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="344"/>
         <source>Moving: %1</source>
         <translation>Bewegung: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="169"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
         <source>Start: %1</source>
         <translation>Beginn: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="174"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="358"/>
         <source>End: %1</source>
         <translation>Ende: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="178"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
         <source>Points: %1 (%2)</source>
         <translation>Punkte: %1 (%2)</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="151"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="374"/>
+        <source>Ele.: %1 %2</source>
+        <translation>Höhe: %1 %2</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
+        <source> slope: %1° (%2%)</source>
+        <translation> Neigung: %1° (%2%)</translation>
+    </message>
+    <message>
+        <source> slope: %1°(%2%)</source>
+        <translation type="obsolete">Neigung: %1°(%2%)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="382"/>
+        <source> speed: %1%2</source>
+        <translation>Geschwindigkeit: %1%2</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="394"/>
+        <source>Ascend: %1%2 (%3%)</source>
+        <translation>Anstieg: %1%2 (%3%)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="398"/>
+        <source>Ascend: - (-)</source>
+        <translation>Anstieg: - (-)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="404"/>
+        <source> Descend: %1%2 (%3%)</source>
+        <translation> Abstieg: %1%2 (%3%)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="408"/>
+        <source> Descend: - (-) </source>
+        <translation> Abstieg: - (-) </translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="415"/>
+        <source>Dist.: %1%2 (%3%)</source>
+        <translation>Entf.: %1%2 (%3%)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="419"/>
+        <source>Dist.: - (-)</source>
+        <translation>Entf.: - (-)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="425"/>
+        <source> Moving: %1%2 (%3%)</source>
+        <translation>Bewegung: %1%2 (%3%)</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="429"/>
+        <source> Moving: - (-) </source>
+        <translation> Bewegung: - (-) </translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="94"/>
+        <source>thin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="95"/>
+        <source>normal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
+        <source>wide</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
+        <source>strong</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="485"/>
+        <source>Changed area shape.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="492"/>
+        <source>Changed name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="498"/>
+        <source>Changed border width.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="504"/>
+        <source>Changed fill pattern.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="510"/>
+        <source>Changed opacity.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="516"/>
+        <source>Changed comment.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="522"/>
+        <source>Changed description.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="534"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1034"/>
+        <source>Changed color</source>
+        <translation>Farbe geändert</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
+        <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+        <source>Edit name...</source>
+        <translation>Name ändern...</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <source>Enter new waypoint name.</source>
+        <translation>Geben Sie einen neuen Namen ein.</translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="237"/>
         <source>Elevation: %1 %2</source>
         <translation>Höhe: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="159"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="245"/>
         <source>Proximity: %1 %2</source>
         <translation>Abstand: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="219"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1023"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="310"/>
         <source>Changed name</source>
         <translation>Name geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="226"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="317"/>
         <source>Changed position</source>
         <translation>Position geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="232"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="323"/>
         <source>Changed elevation</source>
         <translation>Höhe geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="238"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
         <source>Changed proximity</source>
         <translation>Abstandsalarm geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="245"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="337"/>
         <source>Changed icon</source>
         <translation>Symbol geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="251"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="343"/>
         <source>Changed comment</source>
         <translation>Kommentar geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="257"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="349"/>
         <source>Changed description</source>
         <translation>Beschreibung geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="300"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="392"/>
         <source>Archived</source>
         <translation>Archiviert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="304"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="396"/>
         <source>Available</source>
-        <translation>Verfügbar:</translation>
+        <translation>Verfügbar</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="308"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="400"/>
         <source>Not Available</source>
         <translation>Nicht verfügbar</translation>
     </message>
@@ -2122,22 +2871,28 @@ Zeile %2, Spalte %3:
     <message>
         <location filename="../map/garmin/CGarminTyp.cpp" line="459"/>
         <source>This is a typ file with unknown polygon encoding. Please report!</source>
-        <translation type="unfinished"></translation>
+        <translation>Dieser Dateityp hat eine unbekannte Polygon Kodierung. Bitte berichten!</translation>
     </message>
     <message>
         <location filename="../map/garmin/CGarminTyp.cpp" line="834"/>
         <source>This is a typ file with unknown polyline encoding. Please report!</source>
-        <translation type="unfinished"></translation>
+        <translation>Dieser Dateityp hat eine unbekannte Polyline Kodierung. Bitte berichten!</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="98"/>
+        <location filename="../gis/IGisItem.cpp" line="182"/>
         <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 type="unfinished">Dieses Element ist schreibgeschützt, weil es wahrscheinlich nicht in QMapShack erstellt wurde. Normalerweise sollte man importierte Daten nicht ändern wollen. Aber wenn Sie der Meinung sind, dass doch, dann drücken Sie 'Ok'.</translation>
+        <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="99"/>
+        <location filename="../gis/IGisItem.cpp" line="183"/>
         <source>Read Only Mode...</source>
         <translation>Schreibgeschützt...</translation>
     </message>
+    <message>
+        <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
+        <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+        <source>Enter new track name.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
diff --git a/src/locale/qmapshack_es.ts b/src/locale/qmapshack_es.ts
index 6069598..9d25baa 100644
--- a/src/locale/qmapshack_es.ts
+++ b/src/locale/qmapshack_es.ts
@@ -4,7 +4,7 @@
 <context>
     <name>CCanvas</name>
     <message>
-        <location filename="../canvas/CCanvas.cpp" line="51"/>
+        <location filename="../canvas/CCanvas.cpp" line="58"/>
         <source>Workspace %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -77,34 +77,90 @@
     </message>
 </context>
 <context>
+    <name>CDetailsOvlArea</name>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <source>Edit name...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <source>Enter new waypoint name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="222"/>
+        <source><h4>Comment:</h4></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="225"/>
+        <source><p>--- no comment ---</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="232"/>
+        <source><h4>Description:</h4></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="235"/>
+        <source><p>--- no description ---</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CDetailsTrk</name>
+    <message>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="145"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="154"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="157"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="163"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="182"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="184"/>
+        <source>%1 %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CDetailsWpt</name>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="115"/>
-        <source>no comment</source>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="120"/>
+        <source><h4>Comment:</h4></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="126"/>
-        <source>no description</source>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="123"/>
+        <source><p>--- no comment ---</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="167"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="130"/>
+        <source><h4>Description:</h4></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="133"/>
+        <source><p>--- no description ---</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
         <source>Edit name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="167"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
         <source>Enter new waypoint name.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="177"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="176"/>
         <source>Enter new elevation.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="186"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="185"/>
         <source>Enter new proximity range.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -112,37 +168,47 @@
 <context>
     <name>CGisListWks</name>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="34"/>
+        <location filename="../gis/CGisListWks.cpp" line="37"/>
         <source>Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="33"/>
+        <location filename="../gis/CGisListWks.cpp" line="36"/>
         <source>Save As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="35"/>
+        <location filename="../gis/CGisListWks.cpp" line="38"/>
         <source>Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="41"/>
+        <location filename="../gis/CGisListWks.cpp" line="44"/>
         <source>Edit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="42"/>
-        <source>Move Waypoint...</source>
+        <location filename="../gis/CGisListWks.cpp" line="45"/>
+        <source>Move Waypoint</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="43"/>
+        <location filename="../gis/CGisListWks.cpp" line="46"/>
         <source>Proj. Waypoint...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisListWks.cpp" line="44"/>
+        <location filename="../gis/CGisListWks.cpp" line="47"/>
+        <source>Track Profile</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/CGisListWks.cpp" line="48"/>
+        <source>Edit Track Points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/CGisListWks.cpp" line="51"/>
         <source>Delete</source>
         <translation type="unfinished"></translation>
     </message>
@@ -163,12 +229,12 @@
 <context>
     <name>CMainWindow</name>
     <message>
-        <location filename="../CMainWindow.cpp" line="389"/>
+        <location filename="../CMainWindow.cpp" line="420"/>
         <source>Ele: %1%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../CMainWindow.cpp" line="490"/>
+        <location filename="../CMainWindow.cpp" line="521"/>
         <source>Load GIS Data...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -818,6 +884,24 @@
     </message>
 </context>
 <context>
+    <name>CMapMAP</name>
+    <message>
+        <location filename="../map/CMapMAP.cpp" line="46"/>
+        <source>Failed ...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/CMapMAP.cpp" line="65"/>
+        <source>Failed to open: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/CMapMAP.cpp" line="75"/>
+        <source>Bad file format: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CMapPathSetup</name>
     <message>
         <location filename="../map/CMapPathSetup.cpp" line="39"/>
@@ -831,6 +915,14 @@
     </message>
 </context>
 <context>
+    <name>CMapPropSetup</name>
+    <message>
+        <location filename="../map/CMapPropSetup.cpp" line="151"/>
+        <source>Cache path...</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CMapRMAP</name>
     <message>
         <location filename="../map/CMapRMAP.cpp" line="47"/>
@@ -901,6 +993,128 @@
     </message>
 </context>
 <context>
+    <name>CMapWMTS</name>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="44"/>
+        <location filename="../map/CMapWMTS.cpp" line="54"/>
+        <location filename="../map/CMapWMTS.cpp" line="64"/>
+        <location filename="../map/CMapWMTS.cpp" line="73"/>
+        <location filename="../map/CMapWMTS.cpp" line="188"/>
+        <source>Error...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="44"/>
+        <source>Failed to open %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="54"/>
+        <source>Failed to read: %1
+line %2, column %3:
+ %4</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="64"/>
+        <source>Failed to read: %1
+Unknown structure.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="73"/>
+        <source>Unexpexted service. '* WMTS 1.0.0' is expected. '%1 %2' is read.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="188"/>
+        <source>No georeference information found.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="243"/>
+        <source>--- All ---</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/CMapWMTS.cpp" line="323"/>
+        <source>%1: %2 tiles pending</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CMouseNormal</name>
+    <message>
+        <location filename="../mouse/CMouseNormal.cpp" line="41"/>
+        <source>Add Waypoint</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/CMouseNormal.cpp" line="42"/>
+        <source>Add Track</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/CMouseNormal.cpp" line="43"/>
+        <source>Add Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CPlotDistance</name>
+    <message>
+        <location filename="../plot/CPlotDistance.cpp" line="55"/>
+        <source>distance [%1]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotDistance.cpp" line="59"/>
+        <source>time [h]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotDistance.cpp" line="61"/>
+        <source>distance. [%1]</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CPlotProfile</name>
+    <message>
+        <location filename="../plot/CPlotProfile.cpp" line="67"/>
+        <source>distance [%1]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotProfile.cpp" line="71"/>
+        <source>time [h]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotProfile.cpp" line="73"/>
+        <source>alt. [%1]</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>CPlotSpeed</name>
+    <message>
+        <location filename="../plot/CPlotSpeed.cpp" line="54"/>
+        <source>distance [%1]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotSpeed.cpp" line="58"/>
+        <source>time [h]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../plot/CPlotSpeed.cpp" line="60"/>
+        <source>speed. [%1]</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CProjWizard</name>
     <message>
         <location filename="../grid/CProjWizard.cpp" line="55"/>
@@ -955,40 +1169,40 @@ is not a valid coordinate system definition:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="38"/>
+        <location filename="../IAbout.ui" line="43"/>
         <source><b>QMapShack</b>, Version</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="45"/>
-        <location filename="../IAbout.ui" line="73"/>
-        <location filename="../IAbout.ui" line="87"/>
-        <location filename="../IAbout.ui" line="101"/>
+        <location filename="../IAbout.ui" line="50"/>
+        <location filename="../IAbout.ui" line="94"/>
+        <location filename="../IAbout.ui" line="108"/>
+        <location filename="../IAbout.ui" line="122"/>
         <source>TextLabel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="66"/>
+        <location filename="../IAbout.ui" line="87"/>
         <source>Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="80"/>
+        <location filename="../IAbout.ui" line="101"/>
         <source>GDAL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="94"/>
+        <location filename="../IAbout.ui" line="115"/>
         <source>Proj4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IAbout.ui" line="117"/>
+        <location filename="../IAbout.ui" line="138"/>
         <source>This software is licensed under GPL3 or any later version</source>
         <translation type="unfinished"></translation>
     </message>
     <message utf8="true">
-        <location filename="../IAbout.ui" line="124"/>
+        <location filename="../IAbout.ui" line="145"/>
         <source>© 2014 Oliver Eichler (oliver.eichler at gmx.de)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1038,33 +1252,33 @@ is not a valid coordinate system definition:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="35"/>
+        <location filename="../dem/IDemPropSetup.ui" line="20"/>
         <source><html><head/><body><p>Change opacity of map</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="47"/>
+        <location filename="../dem/IDemPropSetup.ui" line="32"/>
         <source><html><head/><body><p>Click to use current scale as minimum scale to display the map.</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="50"/>
-        <location filename="../dem/IDemPropSetup.ui" line="87"/>
+        <location filename="../dem/IDemPropSetup.ui" line="35"/>
+        <location filename="../dem/IDemPropSetup.ui" line="72"/>
         <source>...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="71"/>
+        <location filename="../dem/IDemPropSetup.ui" line="56"/>
         <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 type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="84"/>
+        <location filename="../dem/IDemPropSetup.ui" line="69"/>
         <source><html><head/><body><p>Click to use current scale as maximum scale to display the map.</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../dem/IDemPropSetup.ui" line="110"/>
+        <location filename="../dem/IDemPropSetup.ui" line="97"/>
         <source>Hillshading</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1147,66 +1361,198 @@ is not a valid coordinate system definition:
     </message>
 </context>
 <context>
-    <name>IDetailsWpt</name>
+    <name>IDetailsOvlArea</name>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="14"/>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="14"/>
         <source>Dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="47"/>
-        <source><html><head/><body><p>Edit description.</p></body></html></source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="37"/>
+        <source>-</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="50"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="179"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="247"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="273"/>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="75"/>
         <source>...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="80"/>
-        <source>Position:</source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="105"/>
+        <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="87"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="113"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="139"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="203"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="311"/>
-        <source>-</source>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="126"/>
+        <source>Border width</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="140"/>
+        <source>Style</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="159"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="179"/>
+        <source>Points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="206"/>
+        <source>Position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IDetailsOvlArea.ui" line="215"/>
+        <source>Hist.</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>IDetailsTrk</name>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="100"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="28"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="49"/>
+        <source>-
+-</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="117"/>
+        <source>Profile</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="124"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="221"/>
+        <source>Speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="131"/>
+        <source>Progress</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="148"/>
+        <source>...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="201"/>
+        <source>Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="206"/>
         <source>Ele.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="126"/>
-        <source>Proximity:</source>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="211"/>
+        <source>Delta</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="216"/>
+        <source>Dist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="226"/>
+        <source>Slope</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="231"/>
+        <source>Ascend</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="236"/>
+        <source>Descend</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="241"/>
+        <source>Position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="261"/>
+        <source>Info</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="291"/>
+        <source>-</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="302"/>
+        <source>Hist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>IDetailsWpt</name>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="14"/>
+        <source>Dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="176"/>
-        <source><html><head/><body><p>Edit comment.</p></body></html></source>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="233"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="259"/>
+        <source>...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="228"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="49"/>
+        <source>Position:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="56"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="82"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="108"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="155"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="189"/>
+        <source>-</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="69"/>
+        <source>Ele.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="95"/>
+        <source>Proximity:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="214"/>
         <source><html><head/><body><p>The waypoint was imported to QMapShack and was changed. It does not show the original data anymore. Please see history for changes. </p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="244"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="230"/>
         <source><html><head/><body><p>Read Only Mode</p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="304"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="148"/>
         <source>Date/Time:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1219,7 +1565,7 @@ is not a valid coordinate system definition:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/IGisWidget.ui" line="53"/>
+        <location filename="../gis/IGisWidget.ui" line="59"/>
         <source>State</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1455,17 +1801,17 @@ is not a valid coordinate system definition:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../map/IMapList.ui" line="100"/>
-        <source>To add maps use File->Setup Map Pathss. </source>
+        <location filename="../map/IMapList.ui" line="103"/>
+        <source>To add maps use File->Setup Map Paths. </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../map/IMapList.ui" line="113"/>
+        <location filename="../map/IMapList.ui" line="116"/>
         <source>Use the context menu (right mouse button click on entry) to activate a map. Use drag-n-drop to move the activated map in the draw order. </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../map/IMapList.ui" line="138"/>
+        <location filename="../map/IMapList.ui" line="141"/>
         <source>Activate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1509,6 +1855,7 @@ is not a valid coordinate system definition:
     <message>
         <location filename="../map/IMapPropSetup.ui" line="50"/>
         <location filename="../map/IMapPropSetup.ui" line="87"/>
+        <location filename="../map/IMapPropSetup.ui" line="194"/>
         <source>...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1537,6 +1884,52 @@ is not a valid coordinate system definition:
         <source>Points</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../map/IMapPropSetup.ui" line="184"/>
+        <source>-</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/IMapPropSetup.ui" line="208"/>
+        <source>Cache Size (MB)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../map/IMapPropSetup.ui" line="228"/>
+        <source>Expiration (Days)</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>IMouseEditLine</name>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+        <source>Add points?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="240"/>
+        <source>Add points to temporary line?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+        <source>Warning!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IMouseEditLine.cpp" line="652"/>
+        <source>This will replace all data of the orignal by a simple line of coordinates. All other data will be lost permanently.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>IPlot</name>
+    <message>
+        <location filename="../plot/IPlot.cpp" line="465"/>
+        <source>No or bad data.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>IPositionDialog</name>
@@ -1651,6 +2044,109 @@ or
     </message>
 </context>
 <context>
+    <name>IScrOptEditLine</name>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="26"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="50"/>
+        <source>Save to orignal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="57"/>
+        <source>Save as new</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptEditLine.ui" line="64"/>
+        <source>Abort</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptOvlArea</name>
+    <message>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="40"/>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="51"/>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="69"/>
+        <source>...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/IScrOptOvlArea.ui" line="98"/>
+        <source>TextLabel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptPoint</name>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="35"/>
+        <source>Delete point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="49"/>
+        <source>Select a range of points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="63"/>
+        <source>Move selected point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="77"/>
+        <source>Add points before the selected point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="91"/>
+        <source>Add points after the selected point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptPoint.ui" line="38"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="52"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="66"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="80"/>
+        <location filename="../mouse/IScrOptPoint.ui" line="94"/>
+        <source>...</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>IScrOptRange</name>
+    <message>
+        <location filename="../mouse/IScrOptRange.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptRange.ui" line="32"/>
+        <source>Delete selected range of points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../mouse/IScrOptRange.ui" line="35"/>
+        <source>...</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>IScrOptRte</name>
     <message>
         <location filename="../gis/rte/IScrOptRte.ui" line="14"/>
@@ -1687,23 +2183,41 @@ or
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
-        <source><html><head/><body><p>View details &amp; Edit</p></body></html></source>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="40"/>
+        <source>View details &amp; Edit properties of track.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="46"/>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="60"/>
-        <source>...</source>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="54"/>
+        <source>Delete</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="75"/>
+        <source>Show on-screen profile and detailed information about points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="92"/>
+        <source>Cut track at selected point into two tracks.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="106"/>
+        <source>Edit position of track points.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="43"/>
         <location filename="../gis/trk/IScrOptTrk.ui" line="57"/>
-        <source><html><head/><body><p>Delete</p></body></html></source>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="78"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="95"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="109"/>
+        <source>...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IScrOptTrk.ui" line="86"/>
+        <location filename="../gis/trk/IScrOptTrk.ui" line="135"/>
         <source>TextLabel</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1750,6 +2264,19 @@ or
     </message>
 </context>
 <context>
+    <name>ISelectProjectDialog</name>
+    <message>
+        <location filename="../helpers/ISelectProjectDialog.ui" line="14"/>
+        <source>Select a project...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../helpers/ISelectProjectDialog.ui" line="20"/>
+        <source>Select project from list or enter new project name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>ITextEditWidget</name>
     <message>
         <location filename="../helpers/ITextEditWidget.ui" line="14"/>
@@ -1762,10 +2289,10 @@ or
         <location filename="../helpers/ITextEditWidget.ui" line="51"/>
         <location filename="../helpers/ITextEditWidget.ui" line="64"/>
         <location filename="../helpers/ITextEditWidget.ui" line="77"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="117"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="130"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="143"/>
-        <location filename="../helpers/ITextEditWidget.ui" line="156"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="97"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="110"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="123"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="136"/>
         <location filename="../helpers/ITextEditWidget.ui" line="169"/>
         <location filename="../helpers/ITextEditWidget.ui" line="182"/>
         <location filename="../helpers/ITextEditWidget.ui" line="195"/>
@@ -1774,122 +2301,122 @@ or
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="259"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="263"/>
         <source>Undo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="262"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="266"/>
         <source>Ctrl+Z</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="271"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="275"/>
         <source>Redo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="274"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="278"/>
         <source>Ctrl+Shift+Z</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="283"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="287"/>
         <source>Cut</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="286"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="290"/>
         <source>Ctrl+X</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="295"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="299"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="298"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="302"/>
         <source>Ctrl+C</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="307"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="311"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="310"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="314"/>
         <source>Ctrl+V</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="322"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="326"/>
         <source>Align Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="325"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="329"/>
         <source>Ctrl+L</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="337"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="341"/>
         <source>Align Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="340"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="344"/>
         <source>Ctrl+R</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="352"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="356"/>
         <source>Align Center</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="355"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="359"/>
         <source>Ctrl+E</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="367"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="371"/>
         <source>Align Block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="370"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="374"/>
         <source>Ctrl+J</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="382"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="386"/>
         <source>Underline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="385"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="389"/>
         <source>Ctrl+U</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="397"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="401"/>
         <source>Bold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="400"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="404"/>
         <source>Ctrl+B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="412"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="416"/>
         <source>Italic</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../helpers/ITextEditWidget.ui" line="415"/>
+        <location filename="../helpers/ITextEditWidget.ui" line="419"/>
         <source>Ctrl+I</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1938,162 +2465,296 @@ or
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="63"/>
-        <location filename="../gis/CGisProject.cpp" line="72"/>
+        <location filename="../gis/CGisProject.cpp" line="77"/>
+        <location filename="../gis/CGisProject.cpp" line="86"/>
         <source>Failed to read...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="63"/>
+        <location filename="../gis/CGisProject.cpp" line="77"/>
         <source>Failed to read: %1
 line %2, column %3:
  %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="72"/>
+        <location filename="../gis/CGisProject.cpp" line="86"/>
         <source>Not a GPX file: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="339"/>
+        <location filename="../gis/CGisProject.cpp" line="367"/>
         <source>Are you sure you want to delete '%1' from project '%2'?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="340"/>
+        <location filename="../gis/CGisProject.cpp" line="368"/>
         <source>Delete...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="432"/>
+        <location filename="../gis/CGisProject.cpp" line="485"/>
         <source>Save GIS data to...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="484"/>
+        <location filename="../gis/CGisProject.cpp" line="537"/>
         <source>File exists ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="485"/>
+        <location filename="../gis/CGisProject.cpp" line="538"/>
         <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 type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="538"/>
+        <location filename="../gis/CGisProject.cpp" line="604"/>
         <source>Failed to create file '%1'</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="538"/>
-        <location filename="../gis/CGisProject.cpp" line="548"/>
+        <location filename="../gis/CGisProject.cpp" line="604"/>
+        <location filename="../gis/CGisProject.cpp" line="614"/>
         <source>Saveing GIS data failed...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/CGisProject.cpp" line="548"/>
+        <location filename="../gis/CGisProject.cpp" line="614"/>
         <source>Failed to write file '%1'</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="135"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="319"/>
         <source>Length: %1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="142"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="326"/>
         <source>, %1%2 %3, %4%5 %6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="150"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="334"/>
         <source>Time: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="153"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="163"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="337"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="347"/>
         <source>, Speed: %1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="160"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="344"/>
         <source>Moving: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="169"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
         <source>Start: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="174"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="358"/>
         <source>End: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="178"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="362"/>
         <source>Points: %1 (%2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="151"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="374"/>
+        <source>Ele.: %1 %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="382"/>
+        <source> speed: %1%2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="394"/>
+        <source>Ascend: %1%2 (%3%)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="398"/>
+        <source>Ascend: - (-)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="408"/>
+        <source> Descend: - (-) </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="429"/>
+        <source> Moving: - (-) </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="404"/>
+        <source> Descend: %1%2 (%3%)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="242"/>
+        <source>Changed trackpoints, sacrificed all previous data.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
+        <source> slope: %1° (%2%)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="415"/>
+        <source>Dist.: %1%2 (%3%)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="419"/>
+        <source>Dist.: - (-)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="425"/>
+        <source> Moving: %1%2 (%3%)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="94"/>
+        <source>thin</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="95"/>
+        <source>normal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="96"/>
+        <source>wide</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="97"/>
+        <source>strong</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="485"/>
+        <source>Changed area shape.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="492"/>
+        <source>Changed name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="498"/>
+        <source>Changed border width.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="504"/>
+        <source>Changed fill pattern.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="510"/>
+        <source>Changed opacity.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="516"/>
+        <source>Changed comment.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="522"/>
+        <source>Changed description.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="534"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1034"/>
+        <source>Changed color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="237"/>
         <source>Elevation: %1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="159"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="245"/>
         <source>Proximity: %1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="219"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1023"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="310"/>
         <source>Changed name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="226"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
+        <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+        <source>Edit name...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <source>Enter new waypoint name.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="317"/>
         <source>Changed position</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="232"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="323"/>
         <source>Changed elevation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="238"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="329"/>
         <source>Changed proximity</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="245"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="337"/>
         <source>Changed icon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="251"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="343"/>
         <source>Changed comment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="257"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="349"/>
         <source>Changed description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="300"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="392"/>
         <source>Archived</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="304"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="396"/>
         <source>Available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="308"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="400"/>
         <source>Not Available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2114,14 +2775,20 @@ line %2, column %3:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="98"/>
+        <location filename="../gis/IGisItem.cpp" line="182"/>
         <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 type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="99"/>
+        <location filename="../gis/IGisItem.cpp" line="183"/>
         <source>Read Only Mode...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mouse/CMouseEditArea.cpp" line="78"/>
+        <location filename="../mouse/CMouseEditTrk.cpp" line="84"/>
+        <source>Enter new track name.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
diff --git a/src/main.cpp b/src/main.cpp
index 8a160c3..6130522 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -109,6 +109,20 @@ int main(int argc, char ** argv)
     qInstallMessageHandler(myMessageOutput);
 #endif
 
+#ifdef WIN32
+	// setup environment variables for GDAL/Proj4
+	QString apppath = QCoreApplication::applicationDirPath();
+	apppath = apppath.replace("/", "\\");
+
+	//QString env_path = qgetenv("PATH");
+	//env_path += QString(";%1;%1\\proj\\apps;%1\\gdal\\apps;%1\\curl;").arg(apppath);
+	//qputenv("PATH", env_path.toUtf8());
+
+	qputenv("GDAL_DATA", QString("%1\\data").arg(apppath).toUtf8());
+	qputenv("PROJ_LIB", QString("%1\\share").arg(apppath).toUtf8());
+#endif
+
+
     // find Qt's transaltions first
     QString locale = QLocale::system().name();
     QString resourceDir = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
diff --git a/src/map/CMapDraw.cpp b/src/map/CMapDraw.cpp
index cfb82b4..f7013fc 100644
--- a/src/map/CMapDraw.cpp
+++ b/src/map/CMapDraw.cpp
@@ -31,7 +31,7 @@
 
 QList<CMapDraw*> CMapDraw::maps;
 QStringList CMapDraw::mapPaths;
-QStringList CMapDraw::supportedFormats = QString("*.vrt|*.jnx|*.img|*.rmap").split('|');
+QStringList CMapDraw::supportedFormats = QString("*.vrt|*.jnx|*.img|*.rmap|*.wmts|*.map").split('|');
 
 
 CMapDraw::CMapDraw(CCanvas *parent)
@@ -274,6 +274,28 @@ void CMapDraw::restoreActiveMapsList(const QStringList& keys)
     mapList->updateHelpText();
 }
 
+void CMapDraw::reportStatusToCanvas(const QString& key, const QString& msg)
+{
+    canvas->reportStatus(key, msg);
+//    if(msg.isEmpty())
+//    {
+//        statusMessages.remove(key);
+//    }
+//    else
+//    {
+//        statusMessages[key] = msg;
+//    }
+
+//    QString report;
+//    QStringList keys = statusMessages.keys();
+//    keys.sort();
+//    foreach(const QString& key, keys)
+//    {
+//        report += statusMessages[key] + "\n";
+//    }
+
+//    canvas->setStatusMessage(report);
+}
 
 void CMapDraw::drawt(IDrawContext::buffer_t& currentBuffer)
 {
diff --git a/src/map/CMapDraw.h b/src/map/CMapDraw.h
index 69a32bd..d5e4729 100644
--- a/src/map/CMapDraw.h
+++ b/src/map/CMapDraw.h
@@ -68,6 +68,10 @@ class CMapDraw : public IDrawContext
         */
         void getToolTip(const QPoint& px, QString& str);
 
+        /**
+           @brief Set projection of this draw context
+           @param proj      a proj4 string
+         */
         void setProjection(const QString& proj);
 
         static void setupMapPath();
@@ -75,6 +79,18 @@ class CMapDraw : public IDrawContext
         static void loadMapPath(QSettings &cfg);
         static const QStringList& getSupportedFormats(){return supportedFormats;}
 
+        /**
+           @brief Forward messages to CCanvas::reportStatus()
+
+           Messages from various sources will be collected in a list and displayed in the top left corner
+           of the widget.
+
+           @note The object reporting has to take care to remove the message by reporting an empty string.
+
+           @param key   the key to identify the reporting object
+           @param msg   the message to report
+         */
+        void reportStatusToCanvas(const QString& key, const QString& msg);
 
     protected:
         void drawt(buffer_t& currentBuffer);
diff --git a/src/map/CMapIMG.cpp b/src/map/CMapIMG.cpp
index 3a3434d..4b28e2f 100644
--- a/src/map/CMapIMG.cpp
+++ b/src/map/CMapIMG.cpp
@@ -42,10 +42,10 @@
 static inline bool isCompletlyOutside(const QPolygonF& poly, const QRectF &viewport)
 {
 
-    double north =  -90.0 * DEG_TO_RAD;
-    double south =   90.0 * DEG_TO_RAD;
-    double west  =  180.0 * DEG_TO_RAD;
-    double east  = -180.0 * DEG_TO_RAD;
+    qreal north =  -90.0 * DEG_TO_RAD;
+    qreal south =   90.0 * DEG_TO_RAD;
+    qreal west  =  180.0 * DEG_TO_RAD;
+    qreal east  = -180.0 * DEG_TO_RAD;
 
     foreach(const QPointF& pt, poly)
     {
@@ -1639,7 +1639,7 @@ void CMapIMG::drawPolylines(QPainter& p, polytype_t& lines, const QPointF& scale
     font.setBold(false);
     QFontMetricsF metrics(font);
 
-    QVector<double> lengths; lengths.reserve(100);
+    QVector<qreal> lengths; lengths.reserve(100);
 
     int pixmapCount = 0;
     int borderCount = 0;
@@ -1668,7 +1668,7 @@ void CMapIMG::drawPolylines(QPainter& p, polytype_t& lines, const QPointF& scale
         if(property.hasPixmap)
         {
             const QImage &pixmap    = CMainWindow::self().isNight() ? property.imgNight : property.imgDay;
-            const double h          = pixmap.height();
+            const qreal h          = pixmap.height();
 
             QList<quint32>::const_iterator it = dict[type].constBegin();
             for( ; it != dict[type].constEnd() ; ++it)
@@ -1700,9 +1700,9 @@ void CMapIMG::drawPolylines(QPainter& p, polytype_t& lines, const QPointF& scale
 
                     lengths.reserve(size);
 
-                    double u1, u2, v1, v2;
+                    qreal u1, u2, v1, v2;
                     QPainterPath path;
-                    double segLength, totalLength = 0;
+                    qreal segLength, totalLength = 0;
 
                     u1 = poly[0].x();
                     v1 = poly[0].y();
@@ -1728,7 +1728,7 @@ void CMapIMG::drawPolylines(QPainter& p, polytype_t& lines, const QPointF& scale
                     path.addPolygon(poly);
                     const int nLength = lengths.count();
 
-                    double curLength = 0;
+                    qreal curLength = 0;
                     QPointF p2       = path.pointAtPercent(curLength / totalLength);
                     for(int i = 0; i < nLength; ++i)
                     {
@@ -1738,7 +1738,7 @@ void CMapIMG::drawPolylines(QPainter& p, polytype_t& lines, const QPointF& scale
 
                         QPointF p1      = p2;
                         p2              = path.pointAtPercent((curLength + segLength) / totalLength);
-                        double angle    = atan((p2.y() - p1.y()) / (p2.x() - p1.x())) * 180 / M_PI;
+                        qreal angle    = atan((p2.y() - p1.y()) / (p2.x() - p1.x())) * 180 / M_PI;
 
                         if(p2.x() - p1.x() < 0)
                         {
@@ -2454,12 +2454,12 @@ void CMapIMG::getInfoPolylines(const QPoint &pt, QMultiMap<QString, QString>& di
     int i = 0;                   // index into poly line
     int len;                     // number of points in line
     projXY p1, p2;               // the two points of the polyline close to pt
-    double dx,dy;                // delta x and y defined by p1 and p2
-    double d_p1_p2;              // distance between p1 and p2
-    double u;                    // ratio u the tangent point will divide d_p1_p2
-    double x,y;                  // coord. (x,y) of the point on line defined by [p1,p2] close to pt
-    double distance;             // the distance to the polyline
-    double shortest;             // shortest distance sofar
+    qreal dx,dy;                // delta x and y defined by p1 and p2
+    qreal d_p1_p2;              // distance between p1 and p2
+    qreal u;                    // ratio u the tangent point will divide d_p1_p2
+    qreal x,y;                  // coord. (x,y) of the point on line defined by [p1,p2] close to pt
+    qreal distance;             // the distance to the polyline
+    qreal shortest;             // shortest distance sofar
 
     QPointF resPt = pt;
     QString key, value;
@@ -2582,8 +2582,8 @@ void CMapIMG::getInfoPolygons(const QPoint& pt, QMultiMap<QString, QString>& dic
     int     npol;
     int     i = 0, j = 0 ,c = 0;
     projXY      p1, p2;          // the two points of the polyline close to pt
-    double  x = pt.x();
-    double  y = pt.y();
+    qreal  x = pt.x();
+    qreal  y = pt.y();
     QString value;
 
     polytype_t::const_iterator line = polygons.begin();
diff --git a/src/map/CMapIMG.h b/src/map/CMapIMG.h
index 0cf48eb..3695992 100644
--- a/src/map/CMapIMG.h
+++ b/src/map/CMapIMG.h
@@ -38,6 +38,7 @@ typedef QVector<CGarminPoint> pointtype_t;
 
 class CMapIMG : public IMap
 {
+    Q_OBJECT
     public:
         struct maplevel_t
         {
@@ -84,13 +85,13 @@ class CMapIMG : public IMap
             qint32 iCenterLat;
 
             /// north boundary of area covered by this subsection []
-            double north;
+            qreal north;
             /// east boundary of area covered by this subsection []
-            double east;
+            qreal east;
             /// south boundary of area covered by this subsection []
-            double south;
+            qreal south;
             /// west boundary of area covered by this subsection []
-            double west;
+            qreal west;
 
             /// area in meter coordinates covered by this subdivision []
             QRectF area;
@@ -118,13 +119,13 @@ class CMapIMG : public IMap
             QMap<QString,subfile_part_t> parts;
 
             /// north boundary of area covered by this subfile [rad]
-            double north;
+            qreal north;
             /// east boundary of area covered by this subfile [rad]
-            double east;
+            qreal east;
             /// south boundary of area covered by this subfile [rad]
-            double south;
+            qreal south;
             /// west boundary of area covered by this subfile [rad]
-            double west;
+            qreal west;
 
             /// area in [] covered by this subfile
             QRectF area;
diff --git a/src/map/CMapItem.cpp b/src/map/CMapItem.cpp
index dc2d22c..dc6dba7 100644
--- a/src/map/CMapItem.cpp
+++ b/src/map/CMapItem.cpp
@@ -23,7 +23,8 @@
 #include "map/CMapIMG.h"
 #include "map/CMapVRT.h"
 #include "map/CMapMAP.h"
-#include "map/CMapPropSetup.h"
+#include "map/CMapWMTS.h"
+#include "map/IMapProp.h"
 #include <QtGui>
 
 QMutex CMapItem::mutexActiveMaps(QMutex::Recursive);
@@ -115,6 +116,10 @@ void CMapItem::updateIcon()
     {
         img = QPixmap("://icons/32x32/MimeMAP.png");
     }
+    else if(fi.suffix().toLower() == "wmts")
+    {
+        img = QPixmap("://icons/32x32/MimeWMTS.png");
+    }
 
     setIcon(0,QIcon(img));
 }
@@ -186,6 +191,10 @@ bool CMapItem::activate()
     {
         mapfile = new CMapMAP(filename, map);
     }
+    else if(fi.suffix().toLower() == "wmts")
+    {
+        mapfile = new CMapWMTS(filename, map);
+    }
 
     updateIcon();
     // no mapfiles loaded? Bad.
diff --git a/src/map/CMapJNX.cpp b/src/map/CMapJNX.cpp
index eb26ad0..218cec8 100644
--- a/src/map/CMapJNX.cpp
+++ b/src/map/CMapJNX.cpp
@@ -287,10 +287,10 @@ void CMapJNX::draw(IDrawContext::buffer_t& buf)
 
     QPointF bufferScale = buf.scale * buf.zoomFactor;
 
-    double u1 = buf.ref1.x() * RAD_TO_DEG;
-    double v1 = buf.ref1.y() * RAD_TO_DEG;
-    double u2 = buf.ref3.x() * RAD_TO_DEG;
-    double v2 = buf.ref3.y() * RAD_TO_DEG;
+    qreal u1 = buf.ref1.x() * RAD_TO_DEG;
+    qreal v1 = buf.ref1.y() * RAD_TO_DEG;
+    qreal u2 = buf.ref3.x() * RAD_TO_DEG;
+    qreal v2 = buf.ref3.y() * RAD_TO_DEG;
 
     QRectF viewport;
     viewport.setTop(v2);
diff --git a/src/map/CMapJNX.h b/src/map/CMapJNX.h
index 5e09af5..e06a8b5 100644
--- a/src/map/CMapJNX.h
+++ b/src/map/CMapJNX.h
@@ -84,10 +84,10 @@ private:
 
     struct file_t
     {
-        double lon1;
-        double lat1;
-        double lon2;
-        double lat2;
+        qreal lon1;
+        qreal lat1;
+        qreal lon2;
+        qreal lat2;
         QRectF bbox;
 
         QString filename;
@@ -99,10 +99,10 @@ private:
 
     QList<file_t> files;
 
-    double lon1;
-    double lat1;
-    double lon2;
-    double lat2;
+    qreal lon1;
+    qreal lat1;
+    qreal lon2;
+    qreal lat2;
 
 
 };
diff --git a/src/map/CMapMAP.cpp b/src/map/CMapMAP.cpp
index 88ac5e4..e920fd7 100644
--- a/src/map/CMapMAP.cpp
+++ b/src/map/CMapMAP.cpp
@@ -18,11 +18,37 @@
 
 #include "map/CMapMAP.h"
 #include "map/CMapDraw.h"
+#include "helpers/CFileExt.h"
+
+#include <QtWidgets>
+#include <proj_api.h>
+
+#define INT_TO_DEG(x) (qreal(x)/1e6)
+
+#define INT_TO_RAD(x) (qreal(x)/(1e6*RAD_TO_DEG))
+
+
 
 CMapMAP::CMapMAP(const QString &filename, CMapDraw *parent)
     : IMap(eFeatVisibility|eFeatVectorItems, parent)
+    , filename(filename)
 {
 
+    qDebug() << "------------------------------";
+    qDebug() << "MAP: try to open" << filename;
+
+    try
+    {
+        readBasics();
+    }
+    catch(const exce_t& e)
+    {
+        QMessageBox::critical(0, tr("Failed ..."), e.msg, QMessageBox::Abort);
+        return;
+    }
+
+
+    isActivated = true;
 }
 
 CMapMAP::~CMapMAP()
@@ -30,6 +56,102 @@ CMapMAP::~CMapMAP()
 
 }
 
+void CMapMAP::readBasics()
+{
+
+    CFileExt file(filename);
+    if(!file.open(QIODevice::ReadOnly))
+    {
+        throw exce_t(eErrOpen, tr("Failed to open: ") + filename);
+    }
+
+    QDataStream stream(&file);
+    stream.setByteOrder(QDataStream::BigEndian);
+
+    // ---------- start file header ----------------------
+    stream.readRawData(header.signature,sizeof(header.signature));
+    if(strncmp(header.signature, "mapsforge binary OSM", sizeof(header.signature)) != 0)
+    {
+        throw exce_t(errFormat,tr("Bad file format: ") + filename);
+    }
+
+    stream >> header.sizeHeader;
+    stream >> header.version;
+    stream >> header.sizeFile;
+    stream >> header.timestamp;
+    stream >> header.minLat;
+    stream >> header.minLon;
+    stream >> header.maxLat;
+    stream >> header.maxLon;
+
+    qDebug() << INT_TO_DEG(header.minLat) << INT_TO_DEG(header.minLon) << INT_TO_DEG(header.maxLat) << INT_TO_DEG(header.maxLon);
+    ref1 = QPointF(INT_TO_RAD(header.minLon), INT_TO_RAD(header.maxLat));
+    ref2 = QPointF(INT_TO_RAD(header.maxLon), INT_TO_RAD(header.minLat));
+
+    stream >> header.sizeTile;
+    stream >> header.projection;
+    stream >> header.flags;
+
+    if(header.flags & eHeaderFlagStartPosition)
+    {
+        stream >> header.latStart >> header.lonStart;
+    }
+
+    if(header.flags & eHeaderFlagStartZoomLevel)
+    {
+        stream >> header.zoomStart;
+    }
+
+    if(header.flags & eHeaderFlagLanguage)
+    {
+        stream >> header.language;
+    }
+
+    if(header.flags & eHeaderFlagComment)
+    {
+        stream >> header.comment;
+    }
+
+    if(header.flags & eHeaderFlagCreator)
+    {
+        stream >> header.creator;
+    }
+
+    quint16 size;
+    utf8 tag;
+    stream >> size;
+    for(int i = 0; i < size; i++)
+    {
+        stream >> tag;
+        header.tagsPOIs << tag;
+    }
+    stream >> size;
+    for(int i = 0; i < size; i++)
+    {
+        stream >> tag;
+        header.tagsWays << tag;
+    }
+
+
+    quint8 N;
+    stream >> N;
+    for(int i = 0; i < N; i++)
+    {
+        layer_t layer;
+        stream >> layer.baseZoom;
+        stream >> layer.minZoom;
+        stream >> layer.maxZoom;
+        stream >> layer.offsetSubFile;
+        stream >> layer.sizeSubFile;
+
+        layers << layer;
+    }
+    // ---------- end file header ----------------------
+
+
+
+}
+
 void CMapMAP::draw(IDrawContext::buffer_t& buf)
 {
 
diff --git a/src/map/CMapMAP.h b/src/map/CMapMAP.h
index 42837bf..cfdc576 100644
--- a/src/map/CMapMAP.h
+++ b/src/map/CMapMAP.h
@@ -20,6 +20,9 @@
 #define CMAPMAP_H
 
 #include "map/IMap.h"
+#include "map/mapsforge/types.h"
+
+#include <QList>
 
 class CMapDraw;
 
@@ -30,6 +33,76 @@ class CMapMAP : public IMap
         virtual ~CMapMAP();
 
         void draw(IDrawContext::buffer_t& buf);
+
+    private:
+        enum exce_e {eErrOpen, eErrAccess, errFormat, errAbort};
+        struct exce_t
+        {
+            exce_t(exce_e err, const QString& msg) : err(err), msg(msg){}
+            exce_e err;
+            QString msg;
+        };
+
+        struct layer_t
+        {
+            quint8 baseZoom;
+            quint8 minZoom;
+            quint8 maxZoom;
+            quint64 offsetSubFile;
+            quint64 sizeSubFile;
+        };
+
+        enum header_flags_e
+        {
+             eHeaderFlagDebugInfo = 0x80
+            ,eHeaderFlagStartPosition = 0x40
+            ,eHeaderFlagStartZoomLevel = 0x20
+            ,eHeaderFlagLanguage = 0x10
+            ,eHeaderFlagComment = 0x08
+            ,eHeaderFlagCreator = 0x04
+        };
+
+        struct header_t
+        {
+            header_t() : latStart(0), lonStart(0), zoomStart(0){}
+            char signature[20];
+            quint32 sizeHeader;
+            quint32 version;
+            quint64 sizeFile;
+            quint64 timestamp;
+            qint32  minLat;
+            qint32  minLon;
+            qint32  maxLat;
+            qint32  maxLon;
+            quint16 sizeTile;
+            utf8    projection;
+            quint8  flags;
+            // optional fields
+            qint32  latStart;
+            qint32  lonStart;
+            quint8  zoomStart;
+            utf8    language;
+            utf8    comment;
+            utf8    creator;
+
+            QStringList tagsPOIs;
+            QStringList tagsWays;
+
+        };
+
+        QList<layer_t> layers;
+
+        void readBasics();
+
+        QString filename;
+
+        header_t header;
+
+        /// top left point of the map
+        QPointF ref1;
+        /// bottom right point of the map
+        QPointF ref2;
+
 };
 
 #endif //CMAPMAP_H
diff --git a/src/map/CMapPropSetup.cpp b/src/map/CMapPropSetup.cpp
index eec5341..1c7ae56 100644
--- a/src/map/CMapPropSetup.cpp
+++ b/src/map/CMapPropSetup.cpp
@@ -44,6 +44,10 @@ CMapPropSetup::CMapPropSetup(IMap * mapfile, CMapDraw *map)
     connect(checkPolylines, SIGNAL(clicked()), map, SLOT(emitSigCanvasUpdate()));
     connect(checkPoints, SIGNAL(clicked()), map, SLOT(emitSigCanvasUpdate()));
 
+    connect(toolCachePath, SIGNAL(clicked()), this, SLOT(slotSetCachePath()));
+    connect(spinCacheSize, SIGNAL(valueChanged(int)), mapfile, SLOT(slotSetCacheSize(qint32)));
+    connect(spinCacheExpiration, SIGNAL(valueChanged(int)), mapfile, SLOT(slotSetCacheExpiration(qint32)));
+
     if(mapfile->hasFeatureVectorItems())
     {
         frameVectorItems->show();
@@ -52,6 +56,26 @@ CMapPropSetup::CMapPropSetup(IMap * mapfile, CMapDraw *map)
     {
         frameVectorItems->hide();
     }
+
+    if(mapfile->hasFeatureTileCache())
+    {
+        frameTileCache->show();
+    }
+    else
+    {
+        frameTileCache->hide();
+    }
+
+    if(mapfile->hasFeatureLayers())
+    {
+        frameLayers->show();
+        mapfile->getLayers(*listLayers);
+    }
+    else
+    {
+        frameLayers->hide();
+    }
+
 }
 
 CMapPropSetup::~CMapPropSetup()
@@ -73,6 +97,8 @@ void CMapPropSetup::slotPropertiesChanged()
     checkPolygons->blockSignals(true);
     checkPolylines->blockSignals(true);
     checkPoints->blockSignals(true);
+    spinCacheSize->blockSignals(true);
+    spinCacheExpiration->blockSignals(true);
 
     sliderOpacity->setValue(mapfile->getOpacity());
     qreal minScale = mapfile->getMinScale();
@@ -86,12 +112,18 @@ void CMapPropSetup::slotPropertiesChanged()
     checkPolylines->setChecked(mapfile->getShowPolylines());
     checkPoints->setChecked(mapfile->getShowPOIs());
 
+    labelCachePath->setText(mapfile->getCachePath());
+    spinCacheSize->setValue(mapfile->getCacheSize());
+    spinCacheExpiration->setValue(mapfile->getCacheExpiration());
+
     sliderOpacity->blockSignals(false);
     toolSetMaxScale->blockSignals(false);
     toolSetMinScale->blockSignals(false);
     checkPolygons->blockSignals(false);
     checkPolylines->blockSignals(false);
     checkPoints->blockSignals(false);
+    spinCacheSize->blockSignals(false);
+    spinCacheExpiration->blockSignals(false);
 
 }
 
@@ -113,6 +145,17 @@ void CMapPropSetup::slotSetMaxScale(bool checked)
     slotPropertiesChanged();
 }
 
+void CMapPropSetup::slotSetCachePath()
+{
+
+    QString path = QFileDialog::getExistingDirectory(this, tr("Cache path..."), labelCachePath->text());
+    if(path.isEmpty())
+    {
+        return;
+    }
+    mapfile->slotSetCachePath(path);
+    slotPropertiesChanged();
+}
 
 #define BAR_HEIGHT 6
 #define HOR_MARGIN 3
diff --git a/src/map/CMapPropSetup.h b/src/map/CMapPropSetup.h
index 6aa94a1..fabfe3d 100644
--- a/src/map/CMapPropSetup.h
+++ b/src/map/CMapPropSetup.h
@@ -41,6 +41,8 @@ class CMapPropSetup : public IMapProp, private Ui::IMapPropSetup
         void slotSetMinScale(bool checked);
         void slotSetMaxScale(bool checked);
 
+        void slotSetCachePath();
+
     private:
         void updateScaleLabel();
 
diff --git a/src/map/CMapVRT.cpp b/src/map/CMapVRT.cpp
index cda24e4..d49abf1 100644
--- a/src/map/CMapVRT.cpp
+++ b/src/map/CMapVRT.cpp
@@ -90,7 +90,7 @@ CMapVRT::CMapVRT(const QString &filename, CMapDraw *parent)
         }
 
         int success = 0;
-        double idx = pBand->GetNoDataValue(&success);
+        qreal idx = pBand->GetNoDataValue(&success);
 
         if(success)
         {
@@ -128,7 +128,7 @@ CMapVRT::CMapVRT(const QString &filename, CMapDraw *parent)
     ysize_px = dataset->GetRasterYSize();
 
 
-    double adfGeoTransform[6];
+    qreal adfGeoTransform[6];
     dataset->GetGeoTransform( adfGeoTransform );
 
     xscale  = adfGeoTransform[1];
@@ -238,7 +238,7 @@ void CMapVRT::draw(IDrawContext::buffer_t& buf)
 
     // estimate number of tiles and use it as a limit if no
     // user defined limit is given
-    double nTiles = ((right - left) * (bottom - top) / (dx*dy));
+    qreal nTiles = ((right - left) * (bottom - top) / (dx*dy));
     if(hasOverviews)
     {
         // if there are overviews tiles canbe reduced by reading
diff --git a/src/map/CMapVRT.h b/src/map/CMapVRT.h
index bd23463..7674a8e 100644
--- a/src/map/CMapVRT.h
+++ b/src/map/CMapVRT.h
@@ -27,6 +27,7 @@ class GDALDataset;
 
 class CMapVRT : public IMap
 {
+    Q_OBJECT
     public:
         CMapVRT(const QString& filename, CMapDraw *parent);
         virtual ~CMapVRT();
@@ -50,12 +51,12 @@ class CMapVRT : public IMap
         quint32 ysize_px;
 
         /// scale [px/m]
-        double xscale;
+        qreal xscale;
         /// scale [px/m]
-        double yscale;
+        qreal yscale;
 
-        double xrot;
-        double yrot;
+        qreal xrot;
+        qreal yrot;
 
         QPointF ref1;
         QPointF ref2;
diff --git a/src/map/CMapWMTS.cpp b/src/map/CMapWMTS.cpp
new file mode 100644
index 0000000..ce77bff
--- /dev/null
+++ b/src/map/CMapWMTS.cpp
@@ -0,0 +1,529 @@
+/**********************************************************************************************
+    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 "map/CMapWMTS.h"
+#include "map/CMapDraw.h"
+#include "map/wmts/CDiskCache.h"
+#include "units/IUnit.h"
+
+
+#include <QtWidgets>
+#include <QtXml>
+#include <QtNetwork>
+
+#include <ogr_spatialref.h>
+#include <proj_api.h>
+
+CMapWMTS::CMapWMTS(const QString &filename, CMapDraw *parent)
+    : IMap(eFeatVisibility|eFeatTileCache, parent)
+    , diskCache(0)
+    , lastRequest(false)
+
+{
+    qDebug() << "------------------------------";
+    qDebug() << "WTMS: try to open" << filename;
+
+    QFile file(filename);
+    if(!file.open(QIODevice::ReadOnly))
+    {
+        QMessageBox::critical(0, tr("Error..."), tr("Failed to open %1").arg(filename), QMessageBox::Abort, QMessageBox::Abort);
+        return;
+    }
+
+    QString msg;
+    int line, column;
+    QDomDocument dom;
+    if(!dom.setContent(&file, true, &msg, &line, &column))
+    {
+        file.close();
+        QMessageBox::critical(0, tr("Error..."), tr("Failed to read: %1\nline %2, column %3:\n %4").arg(filename).arg(line).arg(column).arg(msg), QMessageBox::Abort, QMessageBox::Abort);
+        return;
+    }
+    file.close();
+
+    // start to decode XML
+    // validate content as WMTS capability sheet
+    const QDomElement& xmlCapabilities = dom.documentElement();
+    if(xmlCapabilities.tagName() != "Capabilities")
+    {
+        QMessageBox::critical(0, tr("Error..."), tr("Failed to read: %1\nUnknown structure.").arg(filename), QMessageBox::Abort, QMessageBox::Abort);
+        return;
+    }
+    const QDomNode& xmlServiceIdentification = xmlCapabilities.namedItem("ServiceIdentification");
+    QString ServiceType         = xmlServiceIdentification.firstChildElement("ServiceType").text();
+    QString ServiceTypeVersion  = xmlServiceIdentification.firstChildElement("ServiceTypeVersion").text();
+
+    if(!ServiceType.contains("WMTS", Qt::CaseInsensitive) || ServiceTypeVersion != "1.0.0")
+    {
+        QMessageBox::critical(0, tr("Error..."), tr("Unexpexted service. '* WMTS 1.0.0' is expected. '%1 %2' is read.").arg(ServiceType).arg(ServiceTypeVersion), QMessageBox::Abort, QMessageBox::Abort);
+        return;
+    }
+
+    // read setup of all layers
+    const QDomNode& xmlContents = xmlCapabilities.namedItem("Contents");
+    const QDomNodeList& xmlLayers = xmlContents.toElement().elementsByTagName("Layer");
+    const int N = xmlLayers.count();
+    for(int n = 0; n < N; n++)
+    {
+        QString str;
+        QStringList values;
+        const QDomNode& xmlLayer = xmlLayers.at(n);
+        layer_t layer;
+
+        layer.title = xmlLayer.firstChildElement("Title").text();
+
+        // read bounding box
+        const QDomNode& xmlBoundingBox = xmlLayer.firstChildElement("WGS84BoundingBox");
+        str = xmlBoundingBox.namedItem("LowerCorner").toElement().text();
+        values = str.split(" ");
+        QPointF bottomLeft(values[0].toDouble(), values[1].toDouble());
+
+        str = xmlBoundingBox.namedItem("UpperCorner").toElement().text();
+        values = str.split(" ");
+        QPointF topRight(values[0].toDouble(), values[1].toDouble());
+
+        layer.boundingBox.setBottomLeft(bottomLeft);
+        layer.boundingBox.setTopRight(topRight);
+
+        const QDomNode& xmlStyle = xmlLayer.firstChildElement("Style");
+        layer.styles << xmlStyle.namedItem("Identifier").toElement().text();
+
+        const QDomNode& xmlTileMatrixSetLink = xmlLayer.firstChildElement("TileMatrixSetLink");
+        layer.tileMatrixSet = xmlTileMatrixSetLink.namedItem("TileMatrixSet").toElement().text();
+
+        // read limits if any
+        const QDomNode& xmlTileMatrixSetLimits = xmlTileMatrixSetLink.firstChildElement("TileMatrixSetLimits");
+        if(xmlTileMatrixSetLimits.isElement())
+        {
+            const QDomNodeList& xmlTileMatrixLimits = xmlTileMatrixSetLimits.toElement().elementsByTagName("TileMatrixLimits");
+            const int L = xmlTileMatrixLimits.count();
+            for(int l = 0; l < L; l++)
+            {
+                const QDomNode& xmlTileMatrixLimit = xmlTileMatrixLimits.at(l);
+                QString Identifier          = xmlTileMatrixLimit.namedItem("TileMatrix").toElement().text();
+                layer.limits[Identifier]    = limit_t();
+                limit_t& limit              = layer.limits[Identifier];
+
+                limit.minTileRow = xmlTileMatrixLimit.namedItem("MinTileRow").toElement().text().toInt();
+                limit.maxTileRow = xmlTileMatrixLimit.namedItem("MaxTileRow").toElement().text().toInt();
+                limit.minTileCol = xmlTileMatrixLimit.namedItem("MinTileCol").toElement().text().toInt();
+                limit.maxTileCol = xmlTileMatrixLimit.namedItem("MaxTileCol").toElement().text().toInt();
+            }
+        }
+
+        // read resource URL of layer and replace placeholders by information that is already available
+        const QDomNode& xmlResourceURL = xmlLayer.firstChildElement("ResourceURL");
+        const QDomNamedNodeMap& attr = xmlResourceURL.attributes();
+
+        layer.resourceURL = attr.namedItem("template").nodeValue();
+        layer.resourceURL = layer.resourceURL.replace("{style}",layer.styles[0], Qt::CaseInsensitive);
+        layer.resourceURL = layer.resourceURL.replace("{TileMatrixSet}",layer.tileMatrixSet, Qt::CaseInsensitive);
+
+        // read and replace dimensions in url string by default value
+        const QDomNodeList& xmlDimensions = xmlLayer.toElement().elementsByTagName("Dimension");
+        const int D = xmlDimensions.count();
+        for(int d = 0; d < D; d++)
+        {
+            const QDomNode& xmlDimension = xmlDimensions.at(d);
+
+            QString Identifier = xmlDimension.namedItem("Identifier").toElement().text();
+            QString Default    = xmlDimension.namedItem("Default").toElement().text();
+
+            layer.resourceURL  = layer.resourceURL.replace("{" + Identifier + "}", Default, Qt::CaseInsensitive);
+        }
+
+        // enable layer by default
+        layer.enabled     = true;
+        layers << layer;
+    }
+
+    // if there is more than one layer the layer list in the properties widget has to be enabled.
+    if(layers.size() > 1)
+    {
+        flagsFeature |= eFeatLayers;
+    }
+
+    // read setup of all tile matrices
+    const QDomNodeList& xmlTileMatrixSets = xmlContents.childNodes();
+    const int M = xmlTileMatrixSets.count();
+    for(int m = 0; m < M; m++)
+    {
+        const QDomNode& xmlTileMatrixSet = xmlTileMatrixSets.at(m);
+        if(xmlTileMatrixSet.nodeName() != "TileMatrixSet")
+        {
+            continue;
+        }
+
+
+        QString Identifier      = xmlTileMatrixSet.namedItem("Identifier").toElement().text();
+        tilesets[Identifier]    = tileset_t();
+        tileset_t& tileset      = tilesets[Identifier];
+
+        // read projection string
+        QString str = xmlTileMatrixSet.namedItem("SupportedCRS").toElement().text();
+        char * ptr = str.toLatin1().data();
+        OGRSpatialReference oSRS;
+        oSRS.importFromURN(ptr);
+        oSRS.exportToProj4(&ptr);
+
+        qDebug() << ptr;
+        tileset.pjsrc = pj_init_plus(ptr);
+        if(tileset.pjsrc == 0)
+        {
+            QMessageBox::warning(0, tr("Error..."), tr("No georeference information found."));
+            return;
+        }
+
+        // read information about all matrix levels
+        const QDomNodeList& xmlTileMatrixN = xmlTileMatrixSet.toElement().elementsByTagName("TileMatrix");
+        const int N = xmlTileMatrixN.count();
+        for(int n = 0; n < N; n++)
+        {
+            QString str;
+            QStringList values;
+            const QDomNode& xmlTileMatrix = xmlTileMatrixN.at(n);
+            QString Identifier =  xmlTileMatrix.namedItem("Identifier").toElement().text();
+            tileset.tilematrix[Identifier] = tilematrix_t();
+            tilematrix_t& matrix = tileset.tilematrix[Identifier];
+
+            str = xmlTileMatrix.namedItem("TopLeftCorner").toElement().text();
+            values = str.split(" ");
+            matrix.topLeft      = QPointF(values[0].toDouble(), values[1].toDouble());
+            matrix.scale        = xmlTileMatrix.namedItem("ScaleDenominator").toElement().text().toDouble();
+            matrix.tileWidth    = xmlTileMatrix.namedItem("TileWidth").toElement().text().toInt();
+            matrix.tileHeight   = xmlTileMatrix.namedItem("TileHeight").toElement().text().toInt();
+            matrix.matrixWidth  = xmlTileMatrix.namedItem("MatrixWidth").toElement().text().toInt();
+            matrix.matrixHeight = xmlTileMatrix.namedItem("MatrixHeight").toElement().text().toInt();                        
+        }
+
+    }
+    // ----  done reading XML file
+
+    // create default cache path from filename
+    QFileInfo fi(filename);
+    slotSetCachePath(QDir::home().absoluteFilePath(".QMapShack/" + fi.baseName()));
+
+    accessManager   = new QNetworkAccessManager(parent->thread());
+    connect(this, SIGNAL(sigQueueChanged()), this, SLOT(slotQueueChanged()));
+    connect(accessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(slotRequestFinished(QNetworkReply*)));
+
+    name = fi.baseName().replace("_", " ");
+
+    isActivated = true;
+}
+
+CMapWMTS::~CMapWMTS()
+{
+
+}
+
+void CMapWMTS::getLayers(QListWidget& list)
+{
+    list.clear();
+    if(layers.size() < 2)
+    {
+        return;
+    }
+
+    QListWidgetItem * item = new QListWidgetItem(tr("--- All ---"), &list);
+    item->setCheckState(Qt::Checked);
+    item->setData(Qt::UserRole, -1);
+
+    int i = 0;
+    foreach(const layer_t& layer, layers)
+    {
+        QListWidgetItem * item = new QListWidgetItem(layer.title, &list);
+        item->setCheckState(layer.enabled ? Qt::Checked : Qt::Unchecked);
+        item->setData(Qt::UserRole, i++);
+    }
+
+    connect(&list, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(slotLayersChanged(QListWidgetItem*)));
+}
+
+void CMapWMTS::configureCache()
+{
+    delete diskCache;
+    diskCache = new CDiskCache(getCachePath(), getCacheSize(), getCacheExpiration(), this);
+}
+
+void CMapWMTS::slotLayersChanged(QListWidgetItem * item)
+{
+    bool isChecked = (item->checkState() == Qt::Checked);
+    int idx = item->data(Qt::UserRole).toInt();
+    if(idx < 0)
+    {
+        QListWidget * list = item->listWidget();
+        list->blockSignals(true);
+
+        for(int i = 0; i < layers.size(); i++)
+        {
+            list->item(i + 1)->setCheckState(isChecked ? Qt::Checked : Qt::Unchecked);
+            layers[i].enabled = isChecked;
+        }
+
+        list->blockSignals(false);
+    }
+    else
+    {
+        layers[idx].enabled = isChecked;
+    }
+
+    map->emitSigCanvasUpdate();
+}
+
+void CMapWMTS::slotQueueChanged()
+{
+    QMutexLocker lock(&mutex);
+
+    if(!urlQueue.isEmpty() && urlPending.size() < 6)
+    {        
+        // request up to 6 pending request
+        for(int i = 0; i < (6 - urlPending.size()); i++)
+        {
+            QString url = urlQueue.dequeue();
+            lastRequest = urlQueue.isEmpty();
+
+            QNetworkRequest request;
+            request.setUrl(url);
+            accessManager->get(request);
+            urlPending << url;
+
+            if(lastRequest)
+            {
+                break;
+            }
+        }
+    }
+    else if(lastRequest && urlPending.isEmpty())
+    {
+        lastRequest = false;
+        // if all tiles are received the map layer can be redrawn with all tiles from cache
+        map->emitSigCanvasUpdate();
+    }
+
+    // report status of pending tiles
+    int pending = urlQueue.size() + urlPending.size();
+    if(pending)
+    {
+        map->reportStatusToCanvas(name, tr("%1: %2 tiles pending").arg(name).arg(pending));
+    }
+    else
+    {
+        map->reportStatusToCanvas(name, "");
+    }
+}
+
+void CMapWMTS::slotRequestFinished(QNetworkReply* reply)
+{
+    QString url = reply->url().toString();
+    if(urlPending.contains(url))
+    {
+        QImage img;
+        // only take good responses
+        if(!reply->error())
+        {
+            // read image data
+            img.loadFromData(reply->readAll());
+
+        }
+        // always store image to cache, the cache will take care of NULL images
+        diskCache->store(url, img);
+
+        urlPending.removeAll(url);
+    }
+
+    // debug output any error
+    if(reply->error())
+    {
+        qDebug() << reply->errorString();
+    }
+
+    // delete reply object
+    reply->deleteLater();
+
+    // check for more items to be queued
+    slotQueueChanged();
+}
+
+void CMapWMTS::draw(IDrawContext::buffer_t& buf)
+{
+    QMutexLocker lock(&mutex);
+
+    urlQueue.clear();
+
+    if(map->needsRedraw())
+    {
+        return;
+    }
+
+    // get pixel offset of top left buffer corner
+    QPointF pp = buf.ref1;
+    map->convertRad2Px(pp);
+
+    // start to draw the map
+    QPainter p(&buf.image);
+    USE_ANTI_ALIASING(p,true);
+    p.setOpacity(getOpacity()/100.0);
+    p.translate(-pp);
+
+
+    // calculate maximum viewport
+    qreal x1 = buf.ref1.x() < buf.ref4.x() ? buf.ref1.x() : buf.ref4.x();
+    qreal y1 = buf.ref1.y() > buf.ref2.y() ? buf.ref1.y() : buf.ref2.y();
+
+    qreal x2 = buf.ref2.x() > buf.ref3.x() ? buf.ref2.x() : buf.ref3.x();
+    qreal y2 = buf.ref3.y() < buf.ref4.y() ? buf.ref3.y() : buf.ref4.y();
+
+    if(x1 < -180.0*DEG_TO_RAD) x1 = -180*DEG_TO_RAD;
+    if(x2 >  180.0*DEG_TO_RAD) x2 =  180*DEG_TO_RAD;
+
+
+    QRectF viewport(QPointF(x1,y1) * RAD_TO_DEG, QPointF(x2,y2) * RAD_TO_DEG);
+
+    // draw layers
+    foreach(const layer_t& layer, layers)
+    {
+        if(!layer.boundingBox.intersects(viewport) || !layer.enabled)
+        {
+            continue;
+        }
+
+        const tileset_t& tileset            = tilesets[layer.tileMatrixSet];
+        const QMap<QString,limit_t>& limits = layer.limits;
+
+        // convert viewport to layer's coordinate system
+        QPointF pt1(x1,y1);
+        QPointF pt2(x2,y2);
+
+        pj_transform(pjtar, tileset.pjsrc, 1, 0, &pt1.rx(), &pt1.ry(), 0);
+        pj_transform(pjtar, tileset.pjsrc, 1, 0, &pt2.rx(), &pt2.ry(), 0);
+
+        if(pj_is_latlong(tileset.pjsrc))
+        {
+            pt1 *= RAD_TO_DEG;
+            pt2 *= RAD_TO_DEG;
+        }
+
+        // search matrix ID of tile level with best matching scale
+        QString tileMatrixId;
+        QPointF s1 = (pt2 - pt1)/QPointF(buf.image.width(), buf.image.height());        
+        qreal d = NOFLOAT;
+        foreach(const QString& key, tileset.tilematrix.keys())
+        {
+            const tilematrix_t& tilematrix = tileset.tilematrix[key];
+            qreal s2 = tilematrix.scale * 0.28e-3;
+
+
+            if(qAbs(s2 - s1.x()) < d)
+            {
+                tileMatrixId = key;
+                d = qAbs(s2 - s1.x());
+            }
+        }
+
+
+        // get min/max col/row values for that level
+        qint32 minRow, maxRow, minCol, maxCol;
+        const tilematrix_t& tilematrix = tileset.tilematrix[tileMatrixId];
+        if(!limits.isEmpty())
+        {
+            if(limits.contains(tileMatrixId))
+            {
+                const limit_t& limit = limits[tileMatrixId];
+                minCol = limit.minTileCol;
+                maxCol = limit.maxTileCol;
+                minRow = limit.minTileRow;
+                maxRow = limit.maxTileRow;
+            }
+            else
+            {
+                // layer has limits but not for the selected tileMatrixId -> skip layer
+                continue;
+            }
+        }
+        else
+        {
+            minCol = 0;
+            maxCol = tilematrix.matrixWidth;
+            minRow = 0;
+            maxRow = tilematrix.matrixHeight;
+        }
+
+
+        // derive range of col/row to request tiles
+        qreal xscale =  tilematrix.scale * 0.28e-3;
+        qreal yscale = -tilematrix.scale * 0.28e-3;
+
+        qint32 col1 = qFloor((pt1.x() - tilematrix.topLeft.x()) / ( xscale * tilematrix.tileWidth));
+        qint32 row1 = qFloor((pt1.y() - tilematrix.topLeft.y()) / ( yscale * tilematrix.tileHeight));
+        qint32 col2 = qFloor((pt2.x() - tilematrix.topLeft.x()) / ( xscale * tilematrix.tileWidth));
+        qint32 row2 = qFloor((pt2.y() - tilematrix.topLeft.y()) / ( yscale * tilematrix.tileHeight));
+
+
+        if(col1 < minCol) col1 = minCol;
+        if(col1 > maxCol) col1 = maxCol;
+        if(row1 < minRow) row1 = minRow;
+        if(row1 > maxRow) row1 = maxRow;
+
+        if(col2 < minCol) col2 = minCol;
+        if(col2 > maxCol) col2 = maxCol;
+        if(row2 < minRow) row2 = minRow;
+        if(row2 > maxRow) row2 = maxRow;
+
+
+        // start to request tiles. draw tiles in cache, queue urls of tile yet to be requested
+        for(qint32 row = row1; row <= row2; row++)
+        {
+            for(qint32 col = col1; col <= col2; col++)
+            {
+
+                QString url = layer.resourceURL;
+                url = url.replace("{TileMatrix}",tileMatrixId, Qt::CaseInsensitive);
+                url = url.replace("{TileRow}",QString::number(row), Qt::CaseInsensitive);
+                url = url.replace("{TileCol}",QString::number(col), Qt::CaseInsensitive);
+
+                if(diskCache->contains(url))
+                {
+                    QImage img;
+                    diskCache->restore(url, img);
+
+                    QPolygonF l;
+
+                    qreal xx1 =  col      * (xscale * tilematrix.tileWidth)  + tilematrix.topLeft.x();
+                    qreal yy1 =  row      * (yscale * tilematrix.tileHeight) + tilematrix.topLeft.y();
+                    qreal xx2 = (col + 1) * (xscale * tilematrix.tileWidth)  + tilematrix.topLeft.x();
+                    qreal yy2 = (row + 1) * (yscale * tilematrix.tileHeight) + tilematrix.topLeft.y();
+
+                    l << QPointF(xx1, yy1) << QPointF(xx2, yy1) << QPointF(xx2, yy2) << QPointF(xx1, yy2);
+                    pj_transform(tileset.pjsrc,pjtar, 1, 0, &l[0].rx(), &l[0].ry(), 0);
+                    pj_transform(tileset.pjsrc,pjtar, 1, 0, &l[1].rx(), &l[1].ry(), 0);
+                    pj_transform(tileset.pjsrc,pjtar, 1, 0, &l[2].rx(), &l[2].ry(), 0);
+                    pj_transform(tileset.pjsrc,pjtar, 1, 0, &l[3].rx(), &l[3].ry(), 0);
+
+                    drawTile(img, l, p);
+                }
+                else
+                {
+                    urlQueue << url;
+                }
+            }
+        }
+
+        emit sigQueueChanged();
+    }
+}
diff --git a/src/map/CMapWMTS.h b/src/map/CMapWMTS.h
new file mode 100644
index 0000000..5fc2ea4
--- /dev/null
+++ b/src/map/CMapWMTS.h
@@ -0,0 +1,115 @@
+/**********************************************************************************************
+    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/>.
+
+**********************************************************************************************/
+
+#ifndef CMAPWMTS_H
+#define CMAPWMTS_H
+#include "map/IMap.h"
+#include <QMap>
+#include <QQueue>
+#include <QMutex>
+
+
+class CMapDraw;
+class IDiskCache;
+class QNetworkAccessManager;
+class QNetworkReply;
+class QListWidgetItem;
+
+class CMapWMTS  : public IMap
+{
+    Q_OBJECT
+    public:
+        CMapWMTS(const QString& filename, CMapDraw *parent);
+        virtual ~CMapWMTS();
+
+        void draw(IDrawContext::buffer_t& buf);
+
+        void getLayers(QListWidget& list);
+
+    signals:
+        void sigQueueChanged();
+
+    protected:
+        void configureCache();
+
+    private slots:
+        void slotQueueChanged();
+        void slotRequestFinished(QNetworkReply* reply);
+        void slotLayersChanged(QListWidgetItem * item);
+
+    private:
+        struct limit_t
+        {
+            qint32 minTileRow;
+            qint32 maxTileRow;
+            qint32 minTileCol;
+            qint32 maxTileCol;
+        };
+
+        struct layer_t
+        {
+            bool        enabled;
+            QString     title;
+            QStringList styles;
+            QString     tileMatrixSet;
+            QRectF      boundingBox;
+            QString     resourceURL;
+            QMap<QString,limit_t> limits;
+        };
+
+        QList<layer_t> layers;
+
+        struct  tilematrix_t
+        {
+            QPointF topLeft;
+            qreal scale;
+            qint32  tileWidth;
+            qint32  tileHeight;
+            qint32  matrixWidth;
+            qint32  matrixHeight;
+        };
+
+        struct tileset_t
+        {
+            tileset_t() : pjsrc(0) {}
+            ~tileset_t() { if(pjsrc) pj_free(pjsrc); }
+
+            projPJ  pjsrc;
+            QMap<QString,tilematrix_t> tilematrix;
+        };
+
+        QMap<QString,tileset_t> tilesets;
+
+        QString name;
+        /// Mutex to control access to url queue
+        QMutex mutex;
+        /// a queue with all tile urls to request
+        QQueue<QString> urlQueue;
+        /// the tile cache
+        IDiskCache * diskCache;
+        /// access mangager to request tiles
+        QNetworkAccessManager * accessManager;
+
+        QList<QString> urlPending;
+
+        bool lastRequest;
+
+};
+
+#endif //CMAPWMTS_H
+
diff --git a/src/map/IMap.h b/src/map/IMap.h
index 1c3ea60..0f89c02 100644
--- a/src/map/IMap.h
+++ b/src/map/IMap.h
@@ -39,6 +39,8 @@ class IMap : public IDrawObject
         {
              eFeatVisibility  = 0x00000001
             ,eFeatVectorItems = 0x00000002
+            ,eFeatTileCache   = 0x00000004
+            ,eFeatLayers      = 0x00000008
         };
 
         virtual void draw(IDrawContext::buffer_t& buf) = 0;
@@ -74,6 +76,8 @@ class IMap : public IDrawObject
 
         bool hasFeatureVisibility(){return flagsFeature & eFeatVisibility;}
         bool hasFeatureVectorItems(){return flagsFeature & eFeatVectorItems;}
+        bool hasFeatureTileCache(){return flagsFeature & eFeatTileCache;}
+        bool hasFeatureLayers(){return flagsFeature & eFeatLayers;}
 
     protected:
         void convertRad2M(QPointF &p);
@@ -111,6 +115,7 @@ class IMap : public IDrawObject
         /// the setup dialog. Use getSetup() for access
         QPointer<IMapProp> setup;
 
+        /// flag field for features defined in features_e
         quint32 flagsFeature;
 
 
diff --git a/src/map/IMapList.ui b/src/map/IMapList.ui
index 2780480..0fe6379 100644
--- a/src/map/IMapList.ui
+++ b/src/map/IMapList.ui
@@ -43,6 +43,9 @@
        <height>32</height>
       </size>
      </property>
+     <property name="verticalScrollMode">
+      <enum>QAbstractItemView::ScrollPerPixel</enum>
+     </property>
      <attribute name="headerVisible">
       <bool>false</bool>
      </attribute>
@@ -97,7 +100,7 @@
        <item>
         <widget class="QLabel" name="labelHelpFillMapList">
          <property name="text">
-          <string>To add maps use File->Setup Map Pathss. </string>
+          <string>To add maps use File->Setup Map Paths. </string>
          </property>
          <property name="alignment">
           <set>Qt::AlignJustify|Qt::AlignVCenter</set>
diff --git a/src/map/IMapPropSetup.ui b/src/map/IMapPropSetup.ui
index 3f4ca1c..3690e31 100644
--- a/src/map/IMapPropSetup.ui
+++ b/src/map/IMapPropSetup.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>84</height>
+    <width>403</width>
+    <height>226</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -152,6 +152,138 @@
      </layout>
     </widget>
    </item>
+   <item>
+    <widget class="QFrame" name="frameTileCache">
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <property name="spacing">
+       <number>3</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>
+       <layout class="QHBoxLayout" name="horizontalLayout_3">
+        <item>
+         <widget class="QLabel" name="labelCachePath">
+          <property name="text">
+           <string>-</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QToolButton" name="toolCachePath">
+          <property name="text">
+           <string>...</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QFormLayout" name="formLayout">
+        <property name="fieldGrowthPolicy">
+         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+        </property>
+        <item row="0" column="0">
+         <widget class="QLabel" name="label_2">
+          <property name="text">
+           <string>Cache Size (MB)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QSpinBox" name="spinCacheSize">
+          <property name="minimum">
+           <number>100</number>
+          </property>
+          <property name="maximum">
+           <number>1000</number>
+          </property>
+          <property name="singleStep">
+           <number>100</number>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_3">
+          <property name="text">
+           <string>Expiration (Days)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QSpinBox" name="spinCacheExpiration">
+          <property name="minimum">
+           <number>1</number>
+          </property>
+          <property name="maximum">
+           <number>14</number>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QFrame" name="frameLayers">
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <property name="spacing">
+       <number>3</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="QListWidget" name="listLayers">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="frameShape">
+         <enum>QFrame::StyledPanel</enum>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
   </layout>
  </widget>
  <resources>
diff --git a/src/map/garmin/Garmin.h b/src/map/garmin/Garmin.h
index e087457..a14f54c 100644
--- a/src/map/garmin/Garmin.h
+++ b/src/map/garmin/Garmin.h
@@ -24,7 +24,7 @@
 #undef LP
 #endif
 
-#define GARMIN_DEG(x) ((x) < 0x800000 ? (double)(x) * 360.0 / 16777216.0 : (double)((x) - 0x1000000) * 360.0 / 16777216.0)
-#define GARMIN_RAD(x) ((x) < 0x800000 ? (double)(x) * (2*M_PI) / 16777216.0 : (double)((x) - 0x1000000) * (2*M_PI) / 16777216.0)
+#define GARMIN_DEG(x) ((x) < 0x800000 ? (qreal)(x) * 360.0 / 16777216.0 : (qreal)((x) - 0x1000000) * 360.0 / 16777216.0)
+#define GARMIN_RAD(x) ((x) < 0x800000 ? (qreal)(x) * (2*M_PI) / 16777216.0 : (qreal)((x) - 0x1000000) * (2*M_PI) / 16777216.0)
 typedef quint8 quint24[3];
 #endif                           //GARMIN_H
diff --git a/src/mouse/IScrOpt.cpp b/src/map/mapsforge/types.cpp
similarity index 53%
copy from src/mouse/IScrOpt.cpp
copy to src/map/mapsforge/types.cpp
index 735b533..c1731b2 100644
--- a/src/mouse/IScrOpt.cpp
+++ b/src/map/mapsforge/types.cpp
@@ -16,24 +16,59 @@
 
 **********************************************************************************************/
 
-#include "IScrOpt.h"
-#include "units/IUnit.h"
-#include <QtWidgets>
+#include "types.h"
 
-
-IScrOpt::IScrOpt(QWidget *parent)
-    : QWidget(parent)
+QDataStream& operator>>(QDataStream& s, uintX& v)
 {
+    quint8 tmp;
+    int shift   = 0;
+    v.val       = 0;
+
+    s >> tmp;
+    while(tmp & 0x80)
+    {
+        v.val |= (tmp & 0x7F)<<shift;
+        shift += 7;
+        s >> tmp;
+    }
 
+    v.val |= tmp << shift;
+
+    return s;
 }
 
-IScrOpt::~IScrOpt()
+QDataStream& operator>>(QDataStream& s, intX& v)
 {
+    quint8 tmp;
+    int shift   = 0;
+    v.val       = 0;
 
-}
+    s >> tmp;
+    while(tmp & 0x80)
+    {
+        v.val |= (tmp & 0x7F)<<shift;
+        shift += 7;
+        s >> tmp;
+    }
 
+    if(tmp & 0x40)
+    {
+        v.val = -(v.val | ((tmp & 0x3f) << shift));
+    }
+    else
+    {
+        v.val |= tmp << shift;
+    }
 
-void IScrOpt::mouseMoveEvent(QMouseEvent * e)
+    return s;
+}
+
+QDataStream& operator>>(QDataStream& s, utf8& v)
 {
-    mousePos = e->pos();
+    uintX l;
+    s >> l;
+
+    v.val = QString::fromUtf8(s.device()->read(l));
+
+    return s;
 }
diff --git a/src/mouse/IScrOpt.cpp b/src/map/mapsforge/types.h
similarity index 65%
copy from src/mouse/IScrOpt.cpp
copy to src/map/mapsforge/types.h
index 735b533..fe33314 100644
--- a/src/mouse/IScrOpt.cpp
+++ b/src/map/mapsforge/types.h
@@ -16,24 +16,34 @@
 
 **********************************************************************************************/
 
-#include "IScrOpt.h"
-#include "units/IUnit.h"
-#include <QtWidgets>
+#ifndef TYPES_H
+#define TYPES_H
 
+#include <QtCore>
 
-IScrOpt::IScrOpt(QWidget *parent)
-    : QWidget(parent)
+struct uintX
 {
+    uintX():val(0){}
+    operator quint64(){return val;}
+    quint64 val;
+};
 
-}
+struct intX
+{
+    intX():val(0){}
+    operator qint64(){return val;}
+    qint64 val;
+};
 
-IScrOpt::~IScrOpt()
+struct utf8
 {
+    operator QString(){return val;}
+    QString val;
+};
 
-}
+extern QDataStream& operator>>(QDataStream& s, uintX& v);
+extern QDataStream& operator>>(QDataStream& s, intX& v);
+extern QDataStream& operator>>(QDataStream& s, utf8& v);
 
+#endif //TYPES_H
 
-void IScrOpt::mouseMoveEvent(QMouseEvent * e)
-{
-    mousePos = e->pos();
-}
diff --git a/src/map/wmts/CDiskCache.cpp b/src/map/wmts/CDiskCache.cpp
new file mode 100644
index 0000000..d87951e
--- /dev/null
+++ b/src/map/wmts/CDiskCache.cpp
@@ -0,0 +1,156 @@
+/**********************************************************************************************
+    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 "CDiskCache.h"
+
+#include <QtWidgets>
+
+CDiskCache::CDiskCache(const QString &path, qint32 size, qint32 days, QObject * parent)
+    : IDiskCache(parent)   
+    , dir(path)
+    , size(size)
+    , expiration(size)
+    , dummy(256,256, QImage::Format_ARGB32)
+{
+    dummy.fill(Qt::transparent);
+
+    dir.mkpath(dir.path());
+    QFileInfoList files = dir.entryInfoList(QStringList("*.png"), QDir::Files);
+    foreach(const QFileInfo& fileinfo, files)
+    {
+        QString hash    = fileinfo.baseName();
+        table[hash]     = fileinfo.fileName();
+    }
+
+    timer = new QTimer(this);
+    timer->setSingleShot(false);
+    timer->start(60000);
+    connect(timer, SIGNAL(timeout()), this, SLOT(slotCleanup()));
+}
+
+CDiskCache::~CDiskCache()
+{
+
+}
+
+void CDiskCache::store(const QString& key, QImage& img)
+{
+    QMutexLocker lock(&mutex);
+
+    QCryptographicHash md5(QCryptographicHash::Md5);
+    md5.addData(key.toLatin1());
+
+    QString hash        = md5.result().toHex();
+    QString filename    = QString("%1.png").arg(hash);
+
+    if(!img.isNull())
+    {
+        img.save(dir.absoluteFilePath(filename));
+        table[hash] = filename;
+        cache[hash] = img;
+    }
+    else
+    {
+        cache[hash] = dummy;
+    }
+}
+
+void CDiskCache::restore(const QString& key, QImage& img)
+{
+    QMutexLocker lock(&mutex);
+
+    QCryptographicHash md5(QCryptographicHash::Md5);
+    md5.addData(key.toLatin1());
+
+    QString hash = md5.result().toHex();
+
+    if(cache.contains(hash))
+    {
+        img = cache[hash];
+    }
+    else if(table.contains(hash))
+    {
+        img.load(dir.absoluteFilePath(table[hash]));
+        if(!cache.contains(hash))
+        {
+            cache[hash] = img;
+        }
+    }
+    else
+    {
+        img = QImage();
+    }
+
+}
+
+bool CDiskCache::contains(const QString& key)
+{
+    QMutexLocker lock(&mutex);
+
+    QCryptographicHash md5(QCryptographicHash::Md5);
+    md5.addData(key.toLatin1());
+
+    QString hash = md5.result().toHex();
+    return table.contains(hash) || cache.contains(hash);
+}
+
+void CDiskCache::slotCleanup()
+{
+    QMutexLocker lock(&mutex);
+
+    qint64 size = 0;
+    QFileInfoList files = dir.entryInfoList(QStringList("*.png"), QDir::Files);
+    QDateTime now = QDateTime::currentDateTime();
+    int days        = expiration;
+    quint32 maxSize = size * 1024 * 1024;
+
+    // expire old files and calculate cache size
+    foreach(const QFileInfo& fileinfo, files)
+    {
+        if(fileinfo.lastModified().daysTo(now) > days)
+        {
+            QString hash = fileinfo.baseName();
+            table.remove(hash);
+            cache.remove(hash);
+            QFile::remove(fileinfo.absoluteFilePath());
+        }
+        else
+        {
+            size += fileinfo.size();
+        }
+    }
+
+    if(size > maxSize)
+    {
+        // if cache is still too large remove oldest files
+        foreach(const QFileInfo& fileinfo, files)
+        {
+            QString hash = fileinfo.baseName();
+            table.remove(hash);
+            cache.remove(hash);
+            QFile::remove(fileinfo.absoluteFilePath());
+
+            size -= fileinfo.size();
+
+            if(size < maxSize)
+            {
+                break;
+            }
+        }
+    }
+}
diff --git a/src/map/CMapPropSetup.h b/src/map/wmts/CDiskCache.h
similarity index 54%
copy from src/map/CMapPropSetup.h
copy to src/map/wmts/CDiskCache.h
index 6aa94a1..4ba0eb7 100644
--- a/src/map/CMapPropSetup.h
+++ b/src/map/wmts/CDiskCache.h
@@ -16,37 +16,49 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPPROPSETUP_H
-#define CMAPPROPSETUP_H
+#ifndef CDISKCACHE_H
+#define CDISKCACHE_H
 
+#include "map/wmts/IDiskCache.h"
 
-#include "IMapProp.h"
-#include "ui_IMapPropSetup.h"
+#include <QDir>
+#include <QHash>
+#include <QImage>
 
-class CMapPropSetup : public IMapProp, private Ui::IMapPropSetup
+class QTimer;
+
+class CDiskCache : public IDiskCache
 {
     Q_OBJECT
     public:
-        CMapPropSetup(IMap * mapfile, CMapDraw * map);
-        virtual ~CMapPropSetup();
-
-    protected slots:
-        void slotPropertiesChanged();
+        CDiskCache(const QString& path, qint32 size, qint32 days, QObject *parent);
+        virtual ~CDiskCache();
 
-    protected:
-        void resizeEvent(QResizeEvent * e);
+        virtual void store(const QString& key, QImage& img);
+        virtual void restore(const QString& key, QImage& img);
+        virtual bool contains(const QString& key);
 
     private slots:
-        void slotScaleChanged(const QPointF& s);
-        void slotSetMinScale(bool checked);
-        void slotSetMaxScale(bool checked);
+        void slotCleanup();
 
     private:
-        void updateScaleLabel();
+        QDir dir;
+
+        qint32 size;
+
+        qint32 expiration;
+
+        /// hash table to cache images als files on disc
+        QHash<QString, QString> table;
+        /// hash table to cache loaded images in memory
+        QHash<QString, QImage>  cache;
+
+        QTimer * timer;
+
+        QImage dummy;
 
-        static QPointF scale;
 
 };
 
-#endif //CMAPPROPSETUP_H
+#endif //CDISKCACHE_H
 
diff --git a/src/mouse/IScrOpt.cpp b/src/map/wmts/IDiskCache.cpp
similarity index 80%
copy from src/mouse/IScrOpt.cpp
copy to src/map/wmts/IDiskCache.cpp
index 735b533..a89ce85 100644
--- a/src/mouse/IScrOpt.cpp
+++ b/src/map/wmts/IDiskCache.cpp
@@ -16,24 +16,16 @@
 
 **********************************************************************************************/
 
-#include "IScrOpt.h"
-#include "units/IUnit.h"
-#include <QtWidgets>
+#include "IDiskCache.h"
 
-
-IScrOpt::IScrOpt(QWidget *parent)
-    : QWidget(parent)
+IDiskCache::IDiskCache(QObject *parent)
+    : QObject(parent)
 {
 
 }
 
-IScrOpt::~IScrOpt()
+IDiskCache::~IDiskCache()
 {
 
 }
 
-
-void IScrOpt::mouseMoveEvent(QMouseEvent * e)
-{
-    mousePos = e->pos();
-}
diff --git a/src/gis/CGisDraw.h b/src/map/wmts/IDiskCache.h
similarity index 69%
copy from src/gis/CGisDraw.h
copy to src/map/wmts/IDiskCache.h
index 8e70621..1e79638 100644
--- a/src/gis/CGisDraw.h
+++ b/src/map/wmts/IDiskCache.h
@@ -16,22 +16,26 @@
 
 **********************************************************************************************/
 
-#ifndef CGISDRAW_H
-#define CGISDRAW_H
+#ifndef IDISKCACHE_H
+#define IDISKCACHE_H
 
-#include "canvas/IDrawContext.h"
+#include <QObject>
+#include <QMutex>
 
-class CCanvas;
-
-class CGisDraw : public IDrawContext
+class IDiskCache : public QObject
 {
     public:
-        CGisDraw(CCanvas *parent);
-        virtual ~CGisDraw();
+        IDiskCache(QObject *parent);
+        virtual ~IDiskCache();
+
+        virtual void store(const QString& key, QImage& img) = 0;
+        virtual void restore(const QString& key, QImage& img) = 0;
+        virtual bool contains(const QString& key) = 0;
+
 
     protected:
-        virtual void drawt(buffer_t& currentBuffer);
+        QMutex mutex;
 };
 
-#endif //CGISDRAW_H
+#endif //IDISKCACHE_H
 
diff --git a/src/mouse/CMouseEditArea.cpp b/src/mouse/CMouseEditArea.cpp
new file mode 100644
index 0000000..deaa563
--- /dev/null
+++ b/src/mouse/CMouseEditArea.cpp
@@ -0,0 +1,89 @@
+/**********************************************************************************************
+    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 "mouse/CMouseEditArea.h"
+#include "gis/CGisWidget.h"
+#include "gis/ovl/CGisItemOvlArea.h"
+#include "canvas/CCanvas.h"
+
+
+#include <QtWidgets>
+
+CMouseEditArea::CMouseEditArea(const QPointF& point, CGisDraw * gis, CCanvas * parent)
+    : IMouseEditLine(point, gis, parent)
+{
+    cursor = cursor1 = QCursor(QPixmap(":/cursors/cursorMoveArea.png"),0,0);
+}
+
+CMouseEditArea::CMouseEditArea(CGisItemOvlArea &area, CGisDraw * gis, CCanvas * parent)
+    : IMouseEditLine(area, gis, parent)
+{
+    cursor = cursor1 = QCursor(QPixmap(":/cursors/cursorMoveArea.png"),0,0);
+    key    = area.getKey();
+}
+
+CMouseEditArea::~CMouseEditArea()
+{
+
+}
+
+void CMouseEditArea::drawLine(const QPolygonF &l, QPainter& p)
+{
+    p.setPen(QPen(Qt::magenta, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+    p.setBrush(QBrush(Qt::magenta, Qt::BDiagPattern));
+    p.drawPolygon(l);
+}
+
+
+IGisLine * CMouseEditArea::getGisLine()
+{
+    return dynamic_cast<CGisItemOvlArea*>(CGisWidget::self().getItemByKey(key));
+}
+
+void CMouseEditArea::slotCopyToNew()
+{
+    if(coords1.size() < 3)
+    {
+        return;
+    }
+
+    CGisProject * project = CGisWidget::self().selectProject();
+    if(project == 0)
+    {
+        return;
+    }
+
+    QString name;
+    CGisItemOvlArea * area = dynamic_cast<CGisItemOvlArea*>(CGisWidget::self().getItemByKey(key));
+    if(area != 0)
+    {
+        name = area->getName();
+    }
+
+    name = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, name);
+
+    if(name.isEmpty())
+    {
+        return;
+    }
+
+    new CGisItemOvlArea(coords1,name, project, -1);
+
+    canvas->resetMouse();
+    canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+}
diff --git a/src/map/CMapPropSetup.h b/src/mouse/CMouseEditArea.h
similarity index 63%
copy from src/map/CMapPropSetup.h
copy to src/mouse/CMouseEditArea.h
index 6aa94a1..9ec2ead 100644
--- a/src/map/CMapPropSetup.h
+++ b/src/mouse/CMouseEditArea.h
@@ -16,37 +16,32 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPPROPSETUP_H
-#define CMAPPROPSETUP_H
+#ifndef CMOUSEEDITAREA_H
+#define CMOUSEEDITAREA_H
 
+#include "mouse/IMouseEditLine.h"
 
-#include "IMapProp.h"
-#include "ui_IMapPropSetup.h"
+class CGisItemOvlArea;
 
-class CMapPropSetup : public IMapProp, private Ui::IMapPropSetup
+class CMouseEditArea : public IMouseEditLine
 {
     Q_OBJECT
     public:
-        CMapPropSetup(IMap * mapfile, CMapDraw * map);
-        virtual ~CMapPropSetup();
+        CMouseEditArea(const QPointF& point, CGisDraw * gis, CCanvas * parent);
+        CMouseEditArea(CGisItemOvlArea &area, CGisDraw * gis, CCanvas * parent);
+        virtual ~CMouseEditArea();
 
     protected slots:
-        void slotPropertiesChanged();
+        void slotCopyToNew();
 
     protected:
-        void resizeEvent(QResizeEvent * e);
-
-    private slots:
-        void slotScaleChanged(const QPointF& s);
-        void slotSetMinScale(bool checked);
-        void slotSetMaxScale(bool checked);
+        virtual void drawLine(const QPolygonF& l, QPainter& p);
+        IGisLine * getGisLine();
 
     private:
-        void updateScaleLabel();
-
-        static QPointF scale;
+        QString     key;
 
 };
 
-#endif //CMAPPROPSETUP_H
+#endif //CMOUSEEDITAREA_H
 
diff --git a/src/mouse/CMouseEditTrk.cpp b/src/mouse/CMouseEditTrk.cpp
new file mode 100644
index 0000000..5bf68e3
--- /dev/null
+++ b/src/mouse/CMouseEditTrk.cpp
@@ -0,0 +1,95 @@
+/**********************************************************************************************
+    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 "mouse/CMouseEditTrk.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/CGisWidget.h"
+#include "canvas/CCanvas.h"
+
+#include <QtWidgets>
+
+CMouseEditTrk::CMouseEditTrk(const QPointF& point, CGisDraw * gis, CCanvas * parent)
+    : IMouseEditLine(point, gis, parent)
+{
+    cursor = cursor1 = QCursor(QPixmap(":/cursors/cursorMoveLine.png"),0,0);
+}
+
+CMouseEditTrk::CMouseEditTrk(CGisItemTrk &trk, CGisDraw * gis, CCanvas * parent)
+    : IMouseEditLine(trk, gis, parent)
+{
+    cursor = cursor1 = QCursor(QPixmap(":/cursors/cursorMoveLine.png"),0,0);
+    key    = trk.getKey();
+
+    // reset any focus the track might have.
+    trk.setMouseFocusByPoint(NOPOINT, CGisItemTrk::eFocusMouseMove);
+    trk.setMouseFocusByPoint(NOPOINT, CGisItemTrk::eFocusMouseClick);
+    if(trk.hasUserFocus())
+    {
+        trk.gainUserFocus(false);
+    }
+
+    /*
+        trigger complete update of GIS components to make sure all changes to
+        the originating object are reflected on the canvas->
+    */
+    canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+}
+
+CMouseEditTrk::~CMouseEditTrk()
+{
+
+}
+
+IGisLine * CMouseEditTrk::getGisLine()
+{
+    return dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+}
+
+void CMouseEditTrk::slotCopyToNew()
+{
+    if(coords1.size() < 2)
+    {
+        return;
+    }
+
+    CGisProject * project = CGisWidget::self().selectProject();
+    if(project == 0)
+    {
+        return;
+    }
+
+    /// @todo make this independent from track
+    QString name;
+    CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(key));
+    if(trk != 0)
+    {
+        name = trk->getName();
+    }
+
+    name = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, name);
+
+    if(name.isEmpty())
+    {
+        return;
+    }
+
+    new CGisItemTrk(coords1,name, project, -1);
+
+    canvas->resetMouse();
+    canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+}
diff --git a/src/gis/trk/CScrOptTrk.h b/src/mouse/CMouseEditTrk.h
similarity index 67%
copy from src/gis/trk/CScrOptTrk.h
copy to src/mouse/CMouseEditTrk.h
index 7a8d631..33c77fc 100644
--- a/src/gis/trk/CScrOptTrk.h
+++ b/src/mouse/CMouseEditTrk.h
@@ -16,33 +16,30 @@
 
 **********************************************************************************************/
 
-#ifndef CSCROPTTRK_H
-#define CSCROPTTRK_H
+#ifndef CMOUSEEDITTRK_H
+#define CMOUSEEDITTRK_H
 
-#include "mouse/IScrOpt.h"
-
-#include <QWidget>
-#include "ui_IScrOptTrk.h"
+#include "mouse/IMouseEditLine.h"
 
 class CGisItemTrk;
-class IMouse;
 
-class CScrOptTrk : public IScrOpt, private Ui::IScrOptTrk
+class CMouseEditTrk : public IMouseEditLine
 {
     Q_OBJECT
     public:
-        CScrOptTrk(CGisItemTrk * trk, const QPoint &origin, IMouse *parent);
-        virtual ~CScrOptTrk();
+        CMouseEditTrk(const QPointF& point, CGisDraw * gis, CCanvas * parent);
+        CMouseEditTrk(CGisItemTrk &trk, CGisDraw * gis, CCanvas * parent);
+        virtual ~CMouseEditTrk();
 
-        void draw(QPainter& p);
+    protected slots:
+        void slotCopyToNew();
 
-    private slots:
-        void slotDelete();
+    protected:
+        IGisLine * getGisLine();
 
     private:
-        QString key;
-        QPointF anchor;
+        QString     key;
 };
 
-#endif //CSCROPTTRK_H
+#endif //CMOUSEEDITTRK_H
 
diff --git a/src/mouse/CMouseMoveWpt.cpp b/src/mouse/CMouseMoveWpt.cpp
index b4a8d1a..e6cae37 100644
--- a/src/mouse/CMouseMoveWpt.cpp
+++ b/src/mouse/CMouseMoveWpt.cpp
@@ -42,7 +42,7 @@ CMouseMoveWpt::~CMouseMoveWpt()
 
 }
 
-void CMouseMoveWpt::draw(QPainter& p, const QRect &rect)
+void CMouseMoveWpt::draw(QPainter& p,  bool needsRedraw, const QRect &rect)
 {
     QString val, unit, str;
     qreal d, a1 = 0, a2 = 0;
@@ -133,6 +133,6 @@ void CMouseMoveWpt::mouseReleaseEvent(QMouseEvent *e)
 
 void CMouseMoveWpt::wheelEvent(QWheelEvent * e)
 {
-
+    canvas->update();
 }
 
diff --git a/src/mouse/CMouseMoveWpt.h b/src/mouse/CMouseMoveWpt.h
index 630242d..2c2a1da 100644
--- a/src/mouse/CMouseMoveWpt.h
+++ b/src/mouse/CMouseMoveWpt.h
@@ -33,7 +33,7 @@ class CMouseMoveWpt : public IMouse
         CMouseMoveWpt(CGisItemWpt& wpt, CGisDraw * gis, CCanvas * parent);
         virtual ~CMouseMoveWpt();
 
-        void draw(QPainter& p, const QRect &rect);
+        void draw(QPainter& p,  bool needsRedraw, const QRect &rect);
         void mousePressEvent(QMouseEvent * e);
         void mouseMoveEvent(QMouseEvent * e);
         void mouseReleaseEvent(QMouseEvent *e);
diff --git a/src/mouse/CMouseNormal.cpp b/src/mouse/CMouseNormal.cpp
index 38ae4a9..c2eae25 100644
--- a/src/mouse/CMouseNormal.cpp
+++ b/src/mouse/CMouseNormal.cpp
@@ -25,8 +25,10 @@
 #include "gis/rte/CGisItemRte.h"
 #include "gis/CGisWidget.h"
 #include "gis/CGisDraw.h"
+#include "gis/CGisProject.h"
+#include "GeoMath.h"
 
-#include <QtGui>
+#include <QtWidgets>
 
 CMouseNormal::CMouseNormal(CGisDraw *gis, CCanvas *canvas)
     : IMouse(gis, canvas)
@@ -35,6 +37,13 @@ CMouseNormal::CMouseNormal(CGisDraw *gis, CCanvas *canvas)
 {
     cursor = QCursor(QPixmap(":/cursors/cursorMoveMap.png"),0,0);
     screenUnclutter = new CScrOptUnclutter(canvas);
+
+    menu = new QMenu(canvas);
+    menu->addAction(QIcon("://icons/32x32/AddWpt.png"), tr("Add Waypoint"), this, SLOT(slotAddWpt()));
+    menu->addAction(QIcon("://icons/32x32/AddTrk.png"), tr("Add Track"), this, SLOT(slotAddTrk()));
+    menu->addAction(QIcon("://icons/32x32/AddArea.png"), tr("Add Area"), this, SLOT(slotAddArea()));
+    menu->addSeparator();
+    menu->addAction(QIcon("://icons/32x32/Copy.png"), tr("Copy position"), this, SLOT(slotCopyPosition()));
 }
 
 CMouseNormal::~CMouseNormal()
@@ -53,6 +62,12 @@ void CMouseNormal::mousePressEvent(QMouseEvent * e)
         mapMove     = (stateItemSel < eStateNoMapMovePossible);
         mapDidMove  = false;
     }
+    else if(e->button() == Qt::RightButton)
+    {
+        QPoint p = canvas->mapToGlobal(point);
+        menu->exec(p);
+
+    }
 }
 
 void CMouseNormal::mouseMoveEvent(QMouseEvent * e)
@@ -77,6 +92,25 @@ void CMouseNormal::mouseMoveEvent(QMouseEvent * e)
     }
     else
     {
+        switch(stateItemSel)
+        {
+            case eStateIdle:
+            case eStateHooverSingle:
+            case eStateHooverMultiple:
+            {
+                const QString& key = CGisItemTrk::getKeyUserFocus();
+                if(!key.isEmpty())
+                {
+                    CGisItemTrk * trk = dynamic_cast<CGisItemTrk*>(CGisWidget::self().getItemByKey(CGisItemTrk::getKeyUserFocus()));
+                    if(trk != 0)
+                    {
+                        trk->setMouseFocusByPoint(point, CGisItemTrk::eFocusMouseMove);
+                    }
+                }
+                break;
+            }
+            default:;
+        }
         canvas->displayInfo(point);
         canvas->update();                
     }
@@ -110,7 +144,7 @@ void CMouseNormal::mouseReleaseEvent(QMouseEvent *e)
                             stateItemSel = eStateShowItemOptions;
 
                         }
-                    }
+                    }                    
                     break;
                 }
                 case eStateHooverMultiple:
@@ -171,7 +205,7 @@ void CMouseNormal::wheelEvent(QWheelEvent * e)
 }
 
 
-void CMouseNormal::draw(QPainter& p, const QRect &rect)
+void CMouseNormal::draw(QPainter& p, bool needsRedraw, const QRect &rect)
 {
     // no mouse interaction while gis thread is running
     if(gis->isRunning())
@@ -185,6 +219,21 @@ void CMouseNormal::draw(QPainter& p, const QRect &rect)
         case eStateHooverSingle:
         case eStateHooverMultiple:
         {
+
+            /*
+                Collect and draw items close to the last mouse position in the draw method.
+
+                This might be a bit odd but there are two reasons:
+
+                1) Multiple update events are combined by the event loop. Thus multiple mouse move
+                   events are reduced a single paint event. As getItemsByPos() is quite cycle
+                   intense this seems like a good idea.
+
+                2) The list of items passed back by getItemsByPos() must not be stored. That is why
+                   the list has to be generated within the draw handler to access the item's drawHighlight()
+                   method.
+
+            */
             screenUnclutter->clear();
 
             QList<IGisItem*> items;
@@ -224,3 +273,70 @@ void CMouseNormal::draw(QPainter& p, const QRect &rect)
         default:;
     }
 }
+
+
+void CMouseNormal::slotAddWpt()
+{
+
+    QPointF pt = point;
+    gis->convertPx2Rad(pt);
+    pt *= RAD_TO_DEG;
+
+    CGisItemWpt::getNewPosition(pt);
+    if(pt == NOPOINTF)
+    {
+        return;
+    }
+
+    QString name = CGisItemWpt::getNewName();
+    if(name.isEmpty())
+    {
+        return;
+    }
+
+    QString icon = CGisItemWpt::getNewIcon();
+    if(icon.isEmpty())
+    {
+        return;
+    }
+
+    CGisProject * project = CGisWidget::self().selectProject();
+    if(project == 0)
+    {
+        return;
+    }
+
+    new CGisItemWpt(pt, name, icon, project);
+    canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+
+}
+
+void CMouseNormal::slotAddTrk()
+{
+    QPointF pt = point;
+    gis->convertPx2Rad(pt);
+
+    canvas->setMouseEditTrk(pt);
+    canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+}
+
+void CMouseNormal::slotAddArea()
+{
+    QPointF pt = point;
+    gis->convertPx2Rad(pt);
+
+    canvas->setMouseEditArea(pt);
+    canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+}
+
+void CMouseNormal::slotCopyPosition()
+{
+    QPointF pt = point;
+    gis->convertPx2Rad(pt);
+
+    QString position;
+    GPS_Math_Deg_To_Str(pt.x() * RAD_TO_DEG, pt.y() * RAD_TO_DEG, position);
+
+    QClipboard *clipboard = QApplication::clipboard();
+    clipboard->setText(position);
+}
diff --git a/src/mouse/CMouseNormal.h b/src/mouse/CMouseNormal.h
index fa37ecd..2736b3d 100644
--- a/src/mouse/CMouseNormal.h
+++ b/src/mouse/CMouseNormal.h
@@ -29,19 +29,27 @@
 class CCanvas;
 class IScrOpt;
 class CScrOptUnclutter;
+class QMenu;
 
 class CMouseNormal : public IMouse
 {
+    Q_OBJECT
     public:
         CMouseNormal(CGisDraw * gis, CCanvas *canvas);
         virtual ~CMouseNormal();
 
-        void draw(QPainter& p, const QRect &rect);
+        void draw(QPainter& p,  bool needsRedraw,  const QRect &rect);
         void mousePressEvent(QMouseEvent * e);
         void mouseMoveEvent(QMouseEvent * e);
         void mouseReleaseEvent(QMouseEvent *e);
         void wheelEvent(QWheelEvent * e);
 
+    private slots:
+        void slotAddWpt();
+        void slotAddTrk();
+        void slotAddArea();
+        void slotCopyPosition();
+
     protected:
         /// the flag is true if the map moving is in progress
         bool mapMove;
@@ -70,6 +78,8 @@ class CMouseNormal : public IMouse
         CScrOptUnclutter * screenUnclutter;
         QPointer<IScrOpt>  screenItemOption;
 
+        QMenu * menu;
+
 };
 
 #endif //CMOUSENORMAL_H
diff --git a/src/mouse/IScrOpt.cpp b/src/mouse/CScrOptEditLine.cpp
similarity index 82%
copy from src/mouse/IScrOpt.cpp
copy to src/mouse/CScrOptEditLine.cpp
index 735b533..57b900a 100644
--- a/src/mouse/IScrOpt.cpp
+++ b/src/mouse/CScrOptEditLine.cpp
@@ -16,24 +16,22 @@
 
 **********************************************************************************************/
 
-#include "IScrOpt.h"
-#include "units/IUnit.h"
-#include <QtWidgets>
+#include "CScrOptEditLine.h"
 
+#include <QtWidgets>
 
-IScrOpt::IScrOpt(QWidget *parent)
-    : QWidget(parent)
+CScrOptEditLine::CScrOptEditLine(QWidget *parent)
+    : IScrOpt(parent)
 {
+    setupUi(this);
 
+    move(0,0);
+    adjustSize();
+    show();
 }
 
-IScrOpt::~IScrOpt()
+CScrOptEditLine::~CScrOptEditLine()
 {
 
 }
 
-
-void IScrOpt::mouseMoveEvent(QMouseEvent * e)
-{
-    mousePos = e->pos();
-}
diff --git a/src/map/CMapMAP.h b/src/mouse/CScrOptEditLine.h
similarity index 75%
copy from src/map/CMapMAP.h
copy to src/mouse/CScrOptEditLine.h
index 42837bf..f592922 100644
--- a/src/map/CMapMAP.h
+++ b/src/mouse/CScrOptEditLine.h
@@ -16,21 +16,22 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPMAP_H
-#define CMAPMAP_H
+#ifndef CSCROPTEDITLINE_H
+#define CSCROPTEDITLINE_H
 
-#include "map/IMap.h"
+#include "mouse/IScrOpt.h"
+#include "ui_IScrOptEditLine.h"
 
-class CMapDraw;
-
-class CMapMAP : public IMap
+class CScrOptEditLine : public IScrOpt, public Ui::IScrOptEditLine
 {
+    Q_OBJECT
     public:
-        CMapMAP(const QString& filename, CMapDraw *parent);
-        virtual ~CMapMAP();
+        CScrOptEditLine(QWidget * parent);
+        virtual ~CScrOptEditLine();
+
+        void draw(QPainter& p){}
 
-        void draw(IDrawContext::buffer_t& buf);
 };
 
-#endif //CMAPMAP_H
+#endif //CSCROPTEDITLINE_H
 
diff --git a/src/mouse/IScrOpt.cpp b/src/mouse/CScrOptPoint.cpp
similarity index 70%
copy from src/mouse/IScrOpt.cpp
copy to src/mouse/CScrOptPoint.cpp
index 735b533..4cc2915 100644
--- a/src/mouse/IScrOpt.cpp
+++ b/src/mouse/CScrOptPoint.cpp
@@ -16,24 +16,30 @@
 
 **********************************************************************************************/
 
-#include "IScrOpt.h"
-#include "units/IUnit.h"
-#include <QtWidgets>
+#include "mouse/CScrOptPoint.h"
+#include "canvas/CCanvas.h"
 
+#include <QtWidgets>
 
-IScrOpt::IScrOpt(QWidget *parent)
-    : QWidget(parent)
+CScrOptPoint::CScrOptPoint(const QPointF &point, QWidget *parent)
+    : IScrOpt(parent)
 {
+    setupUi(this);
+    adjustSize();
+
+    setOrigin(point.toPoint());
+
+    move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
+    show();
 
 }
 
-IScrOpt::~IScrOpt()
+CScrOptPoint::~CScrOptPoint()
 {
 
 }
 
-
-void IScrOpt::mouseMoveEvent(QMouseEvent * e)
+void CScrOptPoint::draw(QPainter& p)
 {
-    mousePos = e->pos();
+    drawBubble2(origin, p);
 }
diff --git a/src/map/CMapMAP.h b/src/mouse/CScrOptPoint.h
similarity index 74%
copy from src/map/CMapMAP.h
copy to src/mouse/CScrOptPoint.h
index 42837bf..fe2ce99 100644
--- a/src/map/CMapMAP.h
+++ b/src/mouse/CScrOptPoint.h
@@ -16,21 +16,20 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPMAP_H
-#define CMAPMAP_H
+#ifndef CSCROPTPOINT_H
+#define CSCROPTPOINT_H
 
-#include "map/IMap.h"
+#include "mouse/IScrOpt.h"
+#include "ui_IScrOptPoint.h"
 
-class CMapDraw;
-
-class CMapMAP : public IMap
+class CScrOptPoint : public IScrOpt, public Ui::IScrOptPoint
 {
     public:
-        CMapMAP(const QString& filename, CMapDraw *parent);
-        virtual ~CMapMAP();
+        CScrOptPoint(const QPointF& point, QWidget * parent);
+        virtual ~CScrOptPoint();
 
-        void draw(IDrawContext::buffer_t& buf);
+        void draw(QPainter& p);
 };
 
-#endif //CMAPMAP_H
+#endif //CSCROPTPOINT_H
 
diff --git a/src/mouse/IScrOpt.cpp b/src/mouse/CScrOptRange.cpp
similarity index 72%
copy from src/mouse/IScrOpt.cpp
copy to src/mouse/CScrOptRange.cpp
index 735b533..7622d0d 100644
--- a/src/mouse/IScrOpt.cpp
+++ b/src/mouse/CScrOptRange.cpp
@@ -16,24 +16,29 @@
 
 **********************************************************************************************/
 
-#include "IScrOpt.h"
-#include "units/IUnit.h"
-#include <QtWidgets>
+#include "CScrOptRange.h"
 
+#include <QtWidgets>
 
-IScrOpt::IScrOpt(QWidget *parent)
-    : QWidget(parent)
+CScrOptRange::CScrOptRange(const QPointF &point, QWidget *parent)
+    : IScrOpt(parent)
 {
+    setupUi(this);
+    adjustSize();
+
+    setOrigin(point.toPoint());
 
+    move(point.toPoint() + QPoint(-width()/2,SCR_OPT_OFFSET));
+    show();
 }
 
-IScrOpt::~IScrOpt()
+CScrOptRange::~CScrOptRange()
 {
 
-}
 
+}
 
-void IScrOpt::mouseMoveEvent(QMouseEvent * e)
+void CScrOptRange::draw(QPainter& p)
 {
-    mousePos = e->pos();
+    drawBubble2(origin, p);
 }
diff --git a/src/map/CMapMAP.h b/src/mouse/CScrOptRange.h
similarity index 74%
copy from src/map/CMapMAP.h
copy to src/mouse/CScrOptRange.h
index 42837bf..2d95af6 100644
--- a/src/map/CMapMAP.h
+++ b/src/mouse/CScrOptRange.h
@@ -16,21 +16,20 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPMAP_H
-#define CMAPMAP_H
+#ifndef CSCROPTRANGE_H
+#define CSCROPTRANGE_H
 
-#include "map/IMap.h"
+#include "mouse/IScrOpt.h"
+#include "ui_IScrOptRange.h"
 
-class CMapDraw;
-
-class CMapMAP : public IMap
+class CScrOptRange : public IScrOpt, public Ui::IScrOptRange
 {
     public:
-        CMapMAP(const QString& filename, CMapDraw *parent);
-        virtual ~CMapMAP();
+        CScrOptRange(const QPointF& point, QWidget * parent);
+        virtual ~CScrOptRange();
 
-        void draw(IDrawContext::buffer_t& buf);
+        void draw(QPainter& p);
 };
 
-#endif //CMAPMAP_H
+#endif //CSCROPTRANGE_H
 
diff --git a/src/mouse/CScrOptUnclutter.cpp b/src/mouse/CScrOptUnclutter.cpp
index e7092d8..77231b0 100644
--- a/src/mouse/CScrOptUnclutter.cpp
+++ b/src/mouse/CScrOptUnclutter.cpp
@@ -159,3 +159,4 @@ void CScrOptUnclutter::draw(QPainter& p)
         CCanvas::drawText(item.name, p, item.text, Qt::darkBlue);
     }
 }
+
diff --git a/src/mouse/IMouse.cpp b/src/mouse/IMouse.cpp
index 4018191..913da4e 100644
--- a/src/mouse/IMouse.cpp
+++ b/src/mouse/IMouse.cpp
@@ -38,6 +38,15 @@ IMouse::~IMouse()
 
 }
 
+void IMouse::setMouseTracking(bool enabled)
+{
+    canvas->setMouseTracking(enabled);
+    if(!enabled)
+    {
+        timer->stop();
+    }
+}
+
 void IMouse::slotPanCanvas()
 {
     panCanvas(point);
@@ -49,25 +58,25 @@ void IMouse::panCanvas(const QPoint& pos)
     if(pos.x() < SENSITIVE_FRAME)
     {
         int d = SENSITIVE_FRAME - pos.x();
-        canvas->moveMap(QPointF(d , 0));
+        canvas->moveMap(QPointF(d/2 , 0));
         timer->start();
     }
     else if(pos.x() > canvas->width() - SENSITIVE_FRAME)
     {
         int d = canvas->width() - SENSITIVE_FRAME - pos.x();
-        canvas->moveMap(QPointF(d, 0));
+        canvas->moveMap(QPointF(d/2, 0));
         timer->start();
     }
     else if(pos.y() < SENSITIVE_FRAME)
     {
         int d = SENSITIVE_FRAME - pos.y();
-        canvas->moveMap(QPointF(0, d));
+        canvas->moveMap(QPointF(0, d/2));
         timer->start();
     }
     else if(pos.y() > canvas->height() - SENSITIVE_FRAME)
     {
         int d = canvas->height() - SENSITIVE_FRAME - pos.y();
-        canvas->moveMap(QPointF(0, d));
+        canvas->moveMap(QPointF(0, d/2));
         timer->start();
     }
     else
diff --git a/src/mouse/IMouse.h b/src/mouse/IMouse.h
index 6fe46df..78504f1 100644
--- a/src/mouse/IMouse.h
+++ b/src/mouse/IMouse.h
@@ -40,7 +40,7 @@ class IMouse : public QObject
             eNormal
         };
 
-        virtual void draw(QPainter& p, const QRect &rect) = 0;
+        virtual void draw(QPainter& p, bool needsRedraw, const QRect &rect) = 0;
         virtual void mousePressEvent(QMouseEvent * e) = 0;
         virtual void mouseMoveEvent(QMouseEvent * e) = 0;
         virtual void mouseReleaseEvent(QMouseEvent *e) = 0;
@@ -53,6 +53,8 @@ class IMouse : public QObject
         operator const QCursor&(){return cursor;}
         CCanvas * getCanvas(){return canvas;}
 
+        virtual void setMouseTracking(bool enabled);
+
     protected slots:
         virtual void slotPanCanvas();
 
diff --git a/src/mouse/IMouseEditLine.cpp b/src/mouse/IMouseEditLine.cpp
new file mode 100644
index 0000000..663f32f
--- /dev/null
+++ b/src/mouse/IMouseEditLine.cpp
@@ -0,0 +1,687 @@
+/**********************************************************************************************
+    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 "mouse/IMouseEditLine.h"
+#include "mouse/CScrOptPoint.h"
+#include "mouse/CScrOptEditLine.h"
+#include "mouse/CScrOptRange.h"
+#include "gis/IGisLine.h"
+#include "gis/CGisDraw.h"
+#include "gis/CGisWidget.h"
+#include "canvas/CCanvas.h"
+#include "units/IUnit.h"
+#include "GeoMath.h"
+
+
+#include <QtWidgets>
+
+IMouseEditLine::IMouseEditLine(const QPointF& point, CGisDraw * gis, CCanvas * parent)
+    : IMouse(gis, parent)    
+    , state(eStateAddPointFwd)
+    , idxFocus(0)
+    , idxStart(-1)
+    , idxStop(-1)
+{
+    // create a single point line
+    coords1 << point;
+    line    << point;
+    gis->convertRad2Px(line);
+
+    // start with adding trackpints imediately
+    slotAddPoint2();
+
+    // create permanent line edit on screen options
+    scrOptEditLine = new CScrOptEditLine(canvas);
+    scrOptEditLine->pushSaveOrig->hide(); // hide as there is no original
+    connect(scrOptEditLine->pushSaveNew, SIGNAL(clicked()), this, SLOT(slotCopyToNew()));
+    connect(scrOptEditLine->pushAbort, SIGNAL(clicked()), this, SLOT(slotAbort()));
+}
+
+IMouseEditLine::IMouseEditLine(IGisLine &src, CGisDraw *gis, CCanvas *parent)
+    : IMouse(gis, parent)
+    , state(eStateIdle)
+    , idxFocus(-1)
+    , idxStart(-1)
+    , idxStop(-1)
+{        
+
+    src.getData(coords1);
+    // calculate a pixel polyline from track coordinates
+    line = coords1;
+    gis->convertRad2Px(line);
+
+    // create permanent line edit on screen options
+    scrOptEditLine = new CScrOptEditLine(canvas);
+    connect(scrOptEditLine->pushSaveOrig, SIGNAL(clicked()), this, SLOT(slotCopyToOrig()));
+    connect(scrOptEditLine->pushSaveNew, SIGNAL(clicked()), this, SLOT(slotCopyToNew()));
+    connect(scrOptEditLine->pushAbort, SIGNAL(clicked()), this, SLOT(slotAbort()));
+}
+
+IMouseEditLine::~IMouseEditLine()
+{
+    delete scrOptPoint;
+    delete scrOptEditLine;
+    delete scrOptRange;
+}
+
+void IMouseEditLine::drawLine(const QPolygonF &l, QPainter& p)
+{
+    p.setPen(QPen(Qt::magenta, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+    p.drawPolyline(l);
+}
+
+void IMouseEditLine::drawPointOfFocus(QPainter& p)
+{
+    if(idxFocus < 0)
+    {
+        return;
+    }
+
+    const QPointF& pt = line[idxFocus];
+
+    p.setPen(Qt::darkBlue);
+    p.setBrush(QColor(255,255,255,200));
+    p.drawEllipse(pt, 6, 6);
+
+    QPixmap bullet("://icons/8x8/bullet_magenta.png");
+    p.drawPixmap(pt.x() - 3, pt.y() - 3, bullet);
+}
+
+void IMouseEditLine::drawBullets(const QPolygonF &l, QPainter& p)
+{
+    QPixmap bullet("://icons/8x8/bullet_magenta.png");
+    foreach(const QPointF& pt, l)
+    {
+        p.drawPixmap(pt.x() - 3, pt.y() - 3, bullet);
+    }
+}
+
+void IMouseEditLine::drawHighlight1(QPainter& p)
+{
+    if(idxStart < 0 || idxFocus < 0)
+    {
+        return;
+    }
+
+    int pos = idxFocus < idxStart ? idxFocus : idxStart;
+    int len = qAbs(idxFocus - idxStart) + 1;
+
+    QPolygonF highlight = line.mid(pos,len);
+
+    p.setPen(QPen(Qt::red, 12, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+    p.drawPolyline(highlight);
+}
+
+void IMouseEditLine::drawHighlight2(QPainter& p)
+{
+    if(idxStart < 0 || idxStop < 0)
+    {
+        return;
+    }
+
+    int pos = idxStop < idxStart ? idxStop : idxStart;
+    int len = qAbs(idxStop - idxStart) + 1;
+
+    QPolygonF highlight = line.mid(pos,len);
+
+    p.setPen(QPen(Qt::red, 12, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
+    p.drawPolyline(highlight);
+}
+
+void IMouseEditLine::draw(QPainter& p, bool needsRedraw, const QRect &rect)
+{
+    if(needsRedraw)
+    {
+        line = coords1;
+        gis->convertRad2Px(line);
+        newLine = newCoords;
+        gis->convertRad2Px(newLine);
+    }
+
+    switch(state)
+    {
+        case eStateIdle:
+        case eStatePointSelected:
+            drawLine(line, p);
+            drawBullets(line, p);
+            drawPointOfFocus(p);
+            break;
+
+        case eStateSelectRange:
+            drawLine(line, p);
+            drawHighlight1(p);
+            drawBullets(line, p);
+            drawPointOfFocus(p);
+            break;
+
+        case eStateRangeSelected:
+            drawLine(line, p);
+            drawHighlight2(p);
+            drawBullets(line, p);
+            drawPointOfFocus(p);
+            break;
+
+        case eStateMovePoint:
+            drawLine(line, p);
+            drawBullets(line, p);
+            drawPointOfFocus(p);
+            break;
+
+        case eStateAddPointFwd:
+        case eStateAddPointBwd:
+        {
+            QPolygonF l = line.mid(0, idxStart + 1) + newLine + line.mid(idxStop, -1);
+            drawLine(l, p);
+            drawBullets(l, p);
+            break;
+        }
+        default:;
+    }
+
+
+    if(!scrOptPoint.isNull())
+    {
+        scrOptPoint->draw(p);
+    }
+    if(!scrOptRange.isNull())
+    {
+        scrOptRange->draw(p);
+    }
+}
+
+void IMouseEditLine::mousePressEvent(QMouseEvent * e)
+{
+    point  = e->pos();
+    if(e->button() == Qt::RightButton)
+    {
+        switch(state)
+        {
+
+            case eStateSelectRange:                
+                cursor  = cursor1;
+                QApplication::restoreOverrideCursor();
+                QApplication::setOverrideCursor(cursor);
+                //break; no break fall thru
+
+            case eStateRangeSelected:
+                delete scrOptRange;
+
+                state       = eStateIdle;
+                idxFocus    = -1;
+                idxStart    = -1;
+                idxStop     = -1;
+                break;
+
+            case eStateMovePoint:
+                state       = eStateIdle;
+                idxFocus    = -1;
+                coords1     = save;
+                line        = coords1;
+                gis->convertRad2Px(line);
+                break;
+
+            case eStateAddPointBwd:
+            case eStateAddPointFwd:
+                if(QMessageBox::question(canvas, tr("Add points?"), tr("Add points to temporary line?"), QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes)
+                {
+                    if(state == eStateAddPointBwd)
+                    {
+                        newCoords.pop_front();
+                    }
+
+                    if(state == eStateAddPointFwd)
+                    {
+                        newCoords.pop_back();
+                    }
+
+                    save        = coords1.mid(0, idxStart + 1) + newCoords + coords1.mid(idxStop, -1);
+                    coords1     = save;
+                    line        = coords1;
+                    gis->convertRad2Px(line);
+                }
+
+                state       = eStateIdle;
+                idxFocus    = -1;
+                idxStart    = -1;
+                idxStop     = -1;
+
+                cursor  = cursor1;
+                QApplication::restoreOverrideCursor();
+                QApplication::setOverrideCursor(cursor);
+                break;
+
+            default:
+                delete scrOptPoint;
+                delete scrOptRange;
+
+                state       = eStateIdle;
+                idxFocus    = -1;
+                idxStart    = -1;
+                idxStop     = -1;
+        }        
+    }
+    else if(e->button() == Qt::LeftButton)
+    {
+        switch(state)
+        {
+            case eStateIdle:
+            {
+                if(idxFocus >= 0)
+                {
+                    scrOptPoint = new CScrOptPoint(line[idxFocus], canvas);
+
+                    // set icon for add points towards start (backward/eStateAddPointBwd)
+                    if(idxFocus == 0)
+                    {
+                        // point is first of line
+                        qreal a1, a2;
+                        if(coords1.size() > 1)
+                        {
+                            const QPointF& pt1 = coords1[idxFocus];
+                            const QPointF& pt2 = coords1[idxFocus + 1];
+                            GPS_Math_Distance(pt1.x(), pt1.y(), pt2.x(), pt2.y(), a1, a2);
+                        }
+                        else
+                        {
+                            // only one point in the line
+                            a1 = 90;
+                        }
+
+                        QPixmap pix("://icons/32x32/ToTop.png");
+                        QTransform trans;
+                        trans.rotate(a1 + 180);
+
+                        pix = pix.transformed(trans, Qt::SmoothTransformation);
+
+                        scrOptPoint->toolAdd1->setIcon(pix);
+                    }
+                    else
+                    {
+                        // point in the middle of the line
+                        qreal a1, a2;
+                        const QPointF& pt1 = coords1[idxFocus];
+                        const QPointF& pt2 = coords1[idxFocus - 1];
+                        GPS_Math_Distance(pt1.x(), pt1.y(), pt2.x(), pt2.y(), a1, a2);
+
+                        QPixmap pix("://icons/32x32/Up.png");
+                        QTransform trans;
+                        trans.rotate(a1);
+
+                        pix = pix.transformed(trans, Qt::SmoothTransformation);
+
+                        scrOptPoint->toolAdd1->setIcon(pix);
+                    }
+
+                    // set icon for add points towards end (forward/eStateAddPointFwd)
+                    if(idxFocus == (line.size() - 1))
+                    {
+                        // point is last of line
+                        qreal a1, a2;
+                        if(coords1.size() > 1)
+                        {
+                            const QPointF& pt1 = coords1[idxFocus];
+                            const QPointF& pt2 = coords1[idxFocus - 1];
+                            GPS_Math_Distance(pt1.x(), pt1.y(), pt2.x(), pt2.y(), a1, a2);
+                        }
+                        else
+                        {
+                            // only one point in the line
+                            a1 = -90;
+                        }
+
+                        QPixmap pix("://icons/32x32/ToTop.png");
+                        QTransform trans;
+                        trans.rotate(a1 + 180);
+
+                        pix = pix.transformed(trans, Qt::SmoothTransformation);
+
+                        scrOptPoint->toolAdd2->setIcon(pix);
+
+
+                    }
+                    else
+                    {
+                        // point in the middle of the line
+                        qreal a1, a2;
+                        const QPointF& pt1 = coords1[idxFocus];
+                        const QPointF& pt2 = coords1[idxFocus + 1];
+                        GPS_Math_Distance(pt1.x(), pt1.y(), pt2.x(), pt2.y(), a1, a2);
+
+                        QPixmap pix("://icons/32x32/Up.png");
+                        QTransform trans;
+                        trans.rotate(a1);
+
+                        pix = pix.transformed(trans, Qt::SmoothTransformation);
+
+                        scrOptPoint->toolAdd2->setIcon(pix);
+
+                    }
+
+                    connect(scrOptPoint->toolDelete, SIGNAL(clicked()), this, SLOT(slotDeletePoint()));
+                    connect(scrOptPoint->toolSelectRange, SIGNAL(clicked()), this, SLOT(slotSelectRange()));
+                    connect(scrOptPoint->toolMove, SIGNAL(clicked()), this, SLOT(slotMovePoint()));
+                    connect(scrOptPoint->toolAdd1, SIGNAL(clicked()), this, SLOT(slotAddPoint1()));
+                    connect(scrOptPoint->toolAdd2, SIGNAL(clicked()), this, SLOT(slotAddPoint2()));
+
+                    state = eStatePointSelected;
+                }
+                break;
+            }
+            case eStateSelectRange:
+            {
+                state   = eStateRangeSelected;
+                idxStop = idxFocus;
+
+                scrOptRange = new CScrOptRange(line[idxStop], canvas);
+                connect(scrOptRange->toolDelete, SIGNAL(clicked()), this, SLOT(slotDeleteRange()));
+
+                cursor  = cursor1;
+                QApplication::restoreOverrideCursor();
+                QApplication::setOverrideCursor(cursor);
+                break;
+            }
+            case eStateAddPointFwd:
+            {
+                newLine.append(newLine.last());
+                newCoords.append(newCoords.last());
+                idxFocus++;
+                break;
+            }
+            case eStateAddPointBwd:
+            {
+                newLine.prepend(newLine.first());
+                newCoords.prepend(newCoords.first());
+                idxFocus = 0;
+                break;
+            }
+            default:
+            {
+                delete scrOptPoint;
+                delete scrOptRange;
+
+                state       = eStateIdle;
+                idxFocus    = -1;
+                idxStart    = -1;
+                idxStop     = -1;
+            }
+        }
+    }
+    canvas->update();
+}
+
+void IMouseEditLine::mouseMoveEvent(QMouseEvent * e)
+{
+    point  = e->pos();    
+
+    switch(state)
+    {
+        case eStateIdle:
+        {
+            if(!scrOptEditLine->rect().contains(point))
+            {
+                panCanvas(point);
+            }
+
+            int old = idxFocus;
+            idxFocus = getPointCloseBy(point);
+            if(old != idxFocus)
+            {
+                canvas->update();
+            }
+            break;
+        }
+        case eStateSelectRange:
+        {
+            if(!scrOptEditLine->rect().contains(point))
+            {
+                panCanvas(point);
+            }
+
+            int old = idxFocus;
+            idxFocus = getPointCloseBy(point);
+
+            if(idxFocus < 0)
+            {
+                idxFocus = old;
+            }
+
+            if(old != idxFocus)
+            {
+                canvas->update();
+            }
+            break;
+        }
+        case eStateMovePoint:
+        {
+            panCanvas(point);
+
+            QPointF pt      = point;
+            line[idxFocus]  = pt;
+            gis->convertPx2Rad(pt);
+            coords1[idxFocus]  = pt;
+
+            canvas->update();
+            break;
+        }
+        case eStateAddPointBwd:
+        case eStateAddPointFwd:
+        {
+            panCanvas(point);
+
+            QPointF pt          = point;
+            newLine[idxFocus]   = pt;
+            gis->convertPx2Rad(pt);
+            newCoords[idxFocus] = pt;
+
+            canvas->update();
+
+        }
+        default:;
+    }
+}
+
+void IMouseEditLine::mouseReleaseEvent(QMouseEvent *e)
+{
+
+}
+
+void IMouseEditLine::wheelEvent(QWheelEvent * e)
+{
+    canvas->update();
+}
+
+
+int IMouseEditLine::getPointCloseBy(const QPoint& screenPos)
+{
+    qint32 i    = 0;
+    qint32 idx  = -1;
+    qint32  d   = NOINT;
+    foreach(const QPointF& point, line)
+    {
+        int tmp = (screenPos - point).manhattanLength();
+        if(tmp < d)
+        {
+            idx = i;
+            d   = tmp;
+        }
+        i++;
+    }
+
+    if(d > 40) idx = -1;
+
+    return idx;
+}
+
+void IMouseEditLine::slotDeletePoint()
+{
+    if(idxFocus < 0)
+    {
+        return;
+    }
+    scrOptPoint->deleteLater();
+
+    coords1.remove(idxFocus);
+    line.remove(idxFocus);
+
+    idxFocus  = -1;
+    state       = eStateIdle;
+
+    canvas->update();
+}
+
+void IMouseEditLine::slotSelectRange()
+{
+    if(idxFocus < 0)
+    {
+        return;
+    }
+    scrOptPoint->deleteLater();
+
+    idxStart    = idxFocus;
+    state       = eStateSelectRange;
+
+    cursor  = QCursor(QPixmap(":/cursors/cursorSelectRange.png"),0,0);
+    QApplication::restoreOverrideCursor();
+    QApplication::setOverrideCursor(cursor);
+
+}
+
+void IMouseEditLine::slotDeleteRange()
+{
+    if(idxStart < 0 || idxStop < 0)
+    {
+        return;
+    }
+    scrOptRange->deleteLater();
+
+    int len = qAbs(idxStop - idxStart) + 1;
+    int idx = idxStart < idxStop ? idxStart : idxStop;
+    coords1.remove(idx,len);
+    line = coords1;
+    gis->convertRad2Px(line);
+
+    state = eStateIdle;
+    idxFocus  = -1;
+    idxStart    = -1;
+    idxStop     = -1;
+
+    canvas->update();
+}
+
+void IMouseEditLine::slotMovePoint()
+{
+    if(idxFocus < 0)
+    {
+        return;
+    }
+    scrOptPoint->deleteLater();
+
+    save    = coords1;
+    state   = eStateMovePoint;
+
+    canvas->update();
+}
+
+void IMouseEditLine::slotAddPoint1()
+{
+    if(idxFocus < 0)
+    {
+        return;
+    }
+    scrOptPoint->deleteLater();
+
+    // set point with focus as temporary initial point
+    newCoords.clear();    
+    newCoords << coords1[idxFocus];
+    newLine.clear();
+    newLine   << line[idxFocus];
+
+    // mark gap to insert points
+    idxStart = idxFocus - 1;
+    idxStop  = idxFocus;
+
+    // set focus to first point in newLine
+    idxFocus = 0;
+
+    state   = eStateAddPointBwd;
+    cursor  = QCursor(QPixmap(":/cursors/cursorAdd.png"),0,0);
+    QApplication::restoreOverrideCursor();
+    QApplication::setOverrideCursor(cursor);
+
+    canvas->update();
+}
+
+void IMouseEditLine::slotAddPoint2()
+{
+    if(idxFocus < 0)
+    {
+        return;
+    }
+    scrOptPoint->deleteLater();
+
+    // set point with focus as temporary initial point
+    newCoords.clear();
+    newCoords << coords1[idxFocus];    
+    newLine.clear();
+    newLine   << line[idxFocus];
+
+    // mark gap to insert points
+    idxStart = idxFocus;
+    idxStop  = idxFocus + 1;
+
+    // set focus to first point in newLine
+    idxFocus = 0;
+
+    state   = eStateAddPointFwd;
+    cursor  = QCursor(QPixmap(":/cursors/cursorAdd.png"),0,0);
+    QApplication::restoreOverrideCursor();
+    QApplication::setOverrideCursor(cursor);
+
+    canvas->update();
+}
+
+
+void IMouseEditLine::slotAbort()
+{
+    canvas->resetMouse();
+    canvas->update();
+}
+
+void IMouseEditLine::slotCopyToOrig()
+{    
+    if(coords1.size() < 2)
+    {
+        return;
+    }
+
+    int res = QMessageBox::warning(canvas, tr("Warning!"), tr("This will replace all data of the orignal by a simple line of coordinates. All other data will be lost permanently."), QMessageBox::Ok|QMessageBox::Abort, QMessageBox::Ok);
+
+    if(res != QMessageBox::Ok)
+    {
+        return;
+    }
+
+    IGisLine * l = getGisLine();
+    if(l != 0)
+    {
+        l->setData(coords1);
+    }
+    canvas->resetMouse();
+    canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
+}
+
diff --git a/src/mouse/IMouseEditLine.h b/src/mouse/IMouseEditLine.h
new file mode 100644
index 0000000..651477d
--- /dev/null
+++ b/src/mouse/IMouseEditLine.h
@@ -0,0 +1,143 @@
+/**********************************************************************************************
+    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/>.
+
+**********************************************************************************************/
+
+#ifndef IMOUSEEDITLINE_H
+#define IMOUSEEDITLINE_H
+
+#include "mouse/IMouse.h"
+#include <QPolygonF>
+#include <QPointer>
+
+class CGisDraw;
+class CCanvas;
+class IGisLine;
+class CScrOptPoint;
+class CScrOptEditLine;
+class CScrOptRange;
+
+class IMouseEditLine  : public IMouse
+{
+    Q_OBJECT
+    public:
+        /**
+           @brief Start to create a new track with given point as first track point
+           @param point     the starting point
+           @param gis       the draw context to use
+           @param parent    the canvas to use
+         */
+        IMouseEditLine(const QPointF& point, CGisDraw * gis, CCanvas * parent);
+        /**
+           @brief Edit an existing track
+           @param trk       the track to edit
+           @param gis       the draw context to use
+           @param parent    the canvas to use
+         */
+        IMouseEditLine(IGisLine &src, CGisDraw * gis, CCanvas * parent);
+        virtual ~IMouseEditLine();
+
+        void draw(QPainter& p,  bool needsRedraw, const QRect &rect);
+        void mousePressEvent(QMouseEvent * e);
+        void mouseMoveEvent(QMouseEvent * e);
+        void mouseReleaseEvent(QMouseEvent *e);
+        void wheelEvent(QWheelEvent * e);
+
+    protected slots:
+        /**
+           @brief Delete the selected point
+         */
+        void slotDeletePoint();
+        /**
+           @brief Start to select a range of points
+         */
+        void slotSelectRange();
+        /**
+           @brief Delete selected range of points
+         */
+        void slotDeleteRange();
+        /**
+           @brief Move selected point
+         */
+        void slotMovePoint();
+        /**
+           @brief Add points in direction start of track (eStateAddPointBwd)
+         */
+        void slotAddPoint1();
+        /**
+           @brief Add points in direction end of track (eStateAddPointFwd)
+         */
+        void slotAddPoint2();
+
+
+        void slotAbort();
+        void slotCopyToOrig();
+        virtual void slotCopyToNew() = 0;
+
+    protected:
+        virtual void drawLine(const QPolygonF& l, QPainter& p);
+        /**
+           @brief Get access to the IGisLine object a subclass of IMouseEditLine is handling.
+           @return A valid pointer or 0.
+         */
+        virtual IGisLine * getGisLine() = 0;
+        /// shadow cursor needed to restore cursor after some actions providing their own cursor.
+        QCursor     cursor1;
+        /// the line's coordinates in [rad]
+        QPolygonF   coords1;
+
+    private:        
+        void drawPointOfFocus(QPainter& p);
+        void drawBullets(const QPolygonF& l, QPainter& p);
+        void drawHighlight1(QPainter& p);
+        void drawHighlight2(QPainter& p);
+        int getPointCloseBy(const QPoint& screenPos);
+
+        /// backup for coord1
+        QPolygonF   save;
+        /// the line's coordinates in [pixel]
+        QPolygonF   line;
+
+        /// the temporary line of new point to add [rad]
+        QPolygonF   newCoords;
+        /// the temporary line of new point to add [pixel]
+        QPolygonF   newLine;
+
+        enum state_e
+        {
+             eStateIdle
+            ,eStatePointSelected
+            ,eStateSelectRange
+            ,eStateRangeSelected
+            ,eStateMovePoint
+            ,eStateAddPointBwd
+            ,eStateAddPointFwd
+
+        };
+
+        state_e state;
+        qint32 idxFocus;
+        qint32 idxStart;
+        qint32 idxStop;
+
+        QPointer<CScrOptPoint> scrOptPoint;
+        QPointer<CScrOptRange> scrOptRange;
+        CScrOptEditLine * scrOptEditLine;
+};
+
+#endif //IMOUSEEDITLINE_H
+
+
diff --git a/src/mouse/IScrOpt.cpp b/src/mouse/IScrOpt.cpp
index 735b533..e3b4eb0 100644
--- a/src/mouse/IScrOpt.cpp
+++ b/src/mouse/IScrOpt.cpp
@@ -16,7 +16,8 @@
 
 **********************************************************************************************/
 
-#include "IScrOpt.h"
+#include "mouse/IScrOpt.h"
+#include "canvas/CCanvas.h"
 #include "units/IUnit.h"
 #include <QtWidgets>
 
@@ -37,3 +38,41 @@ void IScrOpt::mouseMoveEvent(QMouseEvent * e)
 {
     mousePos = e->pos();
 }
+
+void IScrOpt::drawBubble1(const QPointF& pt, QPainter& p)
+{
+    QRectF r = rect();
+    r.moveTopLeft(QPoint(x(), y()));
+    QPainterPath path1;
+    path1.addRoundedRect(r,5,5);
+
+    QPolygonF poly2;
+    poly2 << pt << (r.topLeft() + QPointF(10,0)) << (r.topLeft() + QPointF(0,10)) << pt;
+    QPainterPath path2;
+    path2.addPolygon(poly2);
+
+    path1 = path1.united(path2);
+
+    p.setPen(CCanvas::penBorderGray);
+    p.setBrush(CCanvas::brushBackWhite);
+    p.drawPolygon(path1.toFillPolygon());
+}
+
+void IScrOpt::drawBubble2(const QPointF &pt, QPainter& p)
+{
+    QRectF r = rect();
+    r.moveTopLeft(QPoint(x(), y()));
+    QPainterPath path1;
+    path1.addRoundedRect(r,5,5);
+
+    QPolygonF poly2;
+    poly2 << pt << QPointF(pt.x() - 10, r.top() + 1) << QPointF(pt.x() + 10, r.top() + 1) << pt;
+    QPainterPath path2;
+    path2.addPolygon(poly2);
+
+    path1 = path1.united(path2);
+
+    p.setPen(CCanvas::penBorderGray);
+    p.setBrush(CCanvas::brushBackWhite);
+    p.drawPolygon(path1.toFillPolygon());
+}
diff --git a/src/mouse/IScrOpt.h b/src/mouse/IScrOpt.h
index d0c8e52..c9579c1 100644
--- a/src/mouse/IScrOpt.h
+++ b/src/mouse/IScrOpt.h
@@ -25,6 +25,8 @@
 
 class QMouseEvent;
 
+#define SCR_OPT_OFFSET 15
+
 class IScrOpt : public QWidget
 {
     public:
@@ -39,6 +41,8 @@ class IScrOpt : public QWidget
         virtual void mouseMoveEvent(QMouseEvent *);
 
     protected:
+        void drawBubble1(const QPointF &pt, QPainter& p);
+        void drawBubble2(const QPointF &pt, QPainter& p);
 
         QPoint origin;
 
diff --git a/src/mouse/IScrOptEditLine.ui b/src/mouse/IScrOptEditLine.ui
new file mode 100644
index 0000000..52c18c4
--- /dev/null
+++ b/src/mouse/IScrOptEditLine.ui
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IScrOptEditLine</class>
+ <widget class="QWidget" name="IScrOptEditLine">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>368</width>
+    <height>100</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>0</width>
+    <height>100</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>16777215</width>
+    <height>100</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <property name="styleSheet">
+   <string notr="true">background-color: rgb(255, 255, 255);</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <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="QPushButton" name="pushSaveOrig">
+       <property name="text">
+        <string>Save to orignal</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushSaveNew">
+       <property name="text">
+        <string>Save as new</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushAbort">
+       <property name="text">
+        <string>Abort</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>
+    </layout>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>45</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/mouse/IScrOptPoint.ui b/src/mouse/IScrOptPoint.ui
new file mode 100644
index 0000000..9198c30
--- /dev/null
+++ b/src/mouse/IScrOptPoint.ui
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IScrOptPoint</class>
+ <widget class="QWidget" name="IScrOptPoint">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>151</width>
+    <height>39</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout">
+   <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="QToolButton" name="toolDelete">
+     <property name="toolTip">
+      <string>Delete point.</string>
+     </property>
+     <property name="text">
+      <string>...</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../resources.qrc">
+       <normaloff>:/icons/32x32/DeleteOne.png</normaloff>:/icons/32x32/DeleteOne.png</iconset>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QToolButton" name="toolSelectRange">
+     <property name="toolTip">
+      <string>Select a range of points.</string>
+     </property>
+     <property name="text">
+      <string>...</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../resources.qrc">
+       <normaloff>:/icons/32x32/SelectRange.png</normaloff>:/icons/32x32/SelectRange.png</iconset>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QToolButton" name="toolMove">
+     <property name="toolTip">
+      <string>Move selected point.</string>
+     </property>
+     <property name="text">
+      <string>...</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../resources.qrc">
+       <normaloff>:/icons/32x32/PointMove.png</normaloff>:/icons/32x32/PointMove.png</iconset>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QToolButton" name="toolAdd1">
+     <property name="toolTip">
+      <string>Add points before the selected point.</string>
+     </property>
+     <property name="text">
+      <string>...</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../resources.qrc">
+       <normaloff>:/icons/32x32/Right.png</normaloff>:/icons/32x32/Right.png</iconset>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QToolButton" name="toolAdd2">
+     <property name="toolTip">
+      <string>Add points after the selected point.</string>
+     </property>
+     <property name="text">
+      <string>...</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../resources.qrc">
+       <normaloff>:/icons/32x32/Right.png</normaloff>:/icons/32x32/Right.png</iconset>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/mouse/IScrOptRange.ui b/src/mouse/IScrOptRange.ui
new file mode 100644
index 0000000..df227aa
--- /dev/null
+++ b/src/mouse/IScrOptRange.ui
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IScrOptRange</class>
+ <widget class="QWidget" name="IScrOptRange">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>103</width>
+    <height>43</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout">
+   <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="QToolButton" name="toolDelete">
+     <property name="toolTip">
+      <string>Delete selected range of points.</string>
+     </property>
+     <property name="text">
+      <string>...</string>
+     </property>
+     <property name="icon">
+      <iconset resource="../resources.qrc">
+       <normaloff>:/icons/32x32/DeleteMultiple.png</normaloff>:/icons/32x32/DeleteMultiple.png</iconset>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/pics/about.png b/src/pics/about.png
new file mode 100644
index 0000000..d5ef34d
Binary files /dev/null and b/src/pics/about.png differ
diff --git a/src/pics/noMap256x256.png b/src/pics/noMap256x256.png
new file mode 100644
index 0000000..816689f
Binary files /dev/null and b/src/pics/noMap256x256.png differ
diff --git a/src/plot/CPlotAxis.cpp b/src/plot/CPlotAxis.cpp
new file mode 100644
index 0000000..3a40852
--- /dev/null
+++ b/src/plot/CPlotAxis.cpp
@@ -0,0 +1,388 @@
+/**********************************************************************************************
+    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 "plot/CPlotAxis.h"
+
+#include <QtWidgets>
+
+inline qreal qLog10(qreal x){return qLn(x)/qLn(10);}
+
+CPlotAxis::CPlotAxis( QObject * parent )
+: QObject( parent )
+, initialized( false )
+, autoscale( false )
+, scale( 1.0 )
+, usedMin( 0.0 )
+, usedMax( 0.0 )
+, limitMin( 0.0 )
+, limitMax( 0.0 )
+, interval( 0.0 )
+, ticStart( 0 )
+, scaleWidth( 0 )
+, ticType( eTicNorm )
+, firstTic( false )
+, lastTic( false )
+, points(0)
+{}
+
+CPlotAxis::~CPlotAxis()
+{}
+
+void CPlotAxis::setLimits(qreal min, qreal max)
+{
+    limitMin = min;
+    limitMax = max;
+}
+
+
+void CPlotAxis::setMinMax( qreal givenMin, qreal givenMax )
+{
+    qreal tmp;
+
+    if ( givenMin == givenMax )
+    {
+        if ( givenMin != 0.0 )
+        {
+            givenMin -= givenMin / 10.0;
+            givenMax += givenMax / 10.0;
+        }
+        else
+        {
+            givenMin -= 0.1;
+            givenMax += 0.1;
+        }
+    }
+
+    if ( givenMin > givenMax )
+    {
+        tmp = givenMax;
+        givenMax = givenMin;
+        givenMin = tmp;
+    }
+
+    usedMin = givenMin;
+    usedMax = givenMax;
+
+    calc();
+
+    initialized = true;
+
+}
+
+
+void CPlotAxis::calc()
+{
+    qreal tmpAbs = ( usedMax - usedMin ) < 0 ? -( usedMax - usedMin ) : ( usedMax - usedMin );
+    qreal tmp = qLog10( tmpAbs / 10.0 );
+
+    qreal exponent = ( int ) tmp;
+    qreal residue = tmp - exponent;
+
+    if ( residue < 0 && residue <= qLog10( 0.1 ) )
+        residue = qLog10( 0.1 );
+    else if ( residue > qLog10( 0.1 ) && residue <= qLog10( 0.2 ) )
+        residue = qLog10( 0.2 );
+    else if ( residue > qLog10( 0.2 ) && residue <= qLog10( 0.5 ) )
+        residue = qLog10( 0.5 );
+    else if ( residue > qLog10( 0.5 ) && residue <= qLog10( 1.0 ) )
+        residue = qLog10( 1.0 );
+    else if ( residue > qLog10( 1.0 ) && residue <= qLog10( 2.0 ) )
+        residue = qLog10( 2.0 );
+    else if ( residue > qLog10( 2.0 ) && residue <= qLog10( 5.0 ) )
+        residue = qLog10( 5.0 );
+    else if ( residue > qLog10( 5.0 ) && residue <= qLog10( 10. ) )
+        residue = qLog10( 10. );
+
+    interval = exponent + residue;
+    interval = qPow( 10, interval );
+
+    if ( autoscale )
+    {
+        usedMin = qFloor( usedMin / interval ) * interval;
+        usedMax = qCeil( usedMax / interval ) * interval;
+    }
+    else
+    {
+        usedMin = usedMin;
+        usedMax = usedMax;
+    }
+
+    int t1 = ( int )( usedMin / interval + 0.5);
+    ticStart = interval * t1;
+    if ( ticStart < usedMin )
+    {
+        ticStart += interval;
+    }
+}
+
+
+const QString CPlotAxis::fmtsgl( qreal val )
+{
+    static QString f;
+    qreal tmp;
+    qreal exponent;
+    qreal residue;
+
+    if ( val != 0 )
+    {
+        if ( val < 0 ) val = -val;
+        tmp = qLog10( val );
+        exponent = ( int ) tmp;
+        residue = tmp - exponent;
+    }
+    else
+    {
+        exponent = 0;
+        residue = 0;
+    }
+
+    if ( abs( ( int ) exponent ) > 5 )
+    {
+        f = "%1.2e";
+    }
+    else
+    {
+        if ( exponent >= 0 )
+        {
+            f = "%" + QString( "%1" ).arg( ( int ) ( exponent + 1 ) );
+            if ( ( exponent == 0 ) && ( residue < 0 ) ) f += ".1f";
+            else f += ".0f";
+        }
+        else
+        {
+            f = "%1." + QString( "%1" ).arg( ( int ) ( -exponent + 1 ) ) + "f";
+        }
+    }
+
+    return f;
+}
+
+
+/**
+  Generates a sprintf style format string for a given value.
+  <pre>
+  0.001   -> "%1.4f"
+  0.01    -> "%1.3f"
+  0.1     -> "%1.2f"
+  1       -> "%1.1f"
+  10      -> "%2.1f"
+  >10000 scientific notation "%1.3e"
+  </pre>
+
+  @param val value to calculate the string on
+
+  @return a zero terminated format string
+
+*/
+const QString CPlotAxis::fmtdbl( qreal val )
+{
+    static QString f;
+    qreal tmp;
+    qreal exponent;
+    qreal residue;
+
+    if ( val != 0 )
+    {
+        if ( val < 0 ) val = -val;
+        tmp = qLog10( val );
+        exponent = ( int ) tmp;
+        residue = tmp - exponent;
+    }
+    else
+    {
+        exponent = 0;
+        residue = 0;
+    }
+
+    if ( abs( ( int ) exponent ) > 5 )
+    {
+        f = "%1.3e";
+    }
+    else
+    {
+        if ( exponent >= 0 )
+        {
+            f = "%" + QString( "%1" ).arg( ( int ) ( exponent + 1 ) );
+            if ( ( exponent == 0 ) && ( residue < 0 ) ) f += ".2f";
+            else f += ".1f";
+        }
+        else
+        {
+            f = "%1." + QString( "%1" ).arg( ( int ) ( -exponent + 2 ) ) + "f";
+        }
+    }
+    return f;
+}
+
+
+int CPlotAxis::getScaleWidth( const QFontMetrics& m )
+{
+
+    if ( scaleWidth > 0 ) return scaleWidth * m.width( " " );
+
+    int width = 0;
+    int tmp;
+    QString format_single_prec = fmtsgl( interval );
+
+    const tic_t * t = ticmark();
+    while ( t )
+    {
+        tmp = m.width( QString().sprintf( format_single_prec.toLatin1().data(), t->val ) );
+        if ( tmp > width ) width = tmp;
+        t = ticmark( t );
+    }
+    return width;
+}
+
+
+void CPlotAxis::getLimits(qreal& limMin, qreal& limMax, qreal& useMin, qreal& useMax)
+{
+    limMin = limitMin;
+    limMax = limitMax;
+    useMin = usedMin;
+    useMax = usedMax;
+}
+
+
+const CPlotAxis::tic_t* CPlotAxis::ticmark( const tic_t * t )
+{
+    QString format_single_prec = fmtsgl( interval );
+
+    switch ( ticType )
+    {
+        case eNoTic:
+            return 0;
+            break;
+
+        case eTicMinMax:
+            if ( t == NULL )
+            {
+                tic.val = usedMin;
+                firstTic = true;
+            }
+            else if ( firstTic == true )
+            {
+                tic.val = usedMax;
+                firstTic = false;
+            }
+            else
+            {
+                return 0;
+            }
+            break;
+
+        case eTicNorm:
+            if ( interval == 0 )
+            {
+                //qWarning() << "CPlotAxis::ticmark() mode 'norm': interval == 0";
+                return 0;
+            }
+            if ( t == NULL )
+            {
+                tic.val = ticStart;
+            }
+            else
+            {
+                tic.val += interval;
+                if ( ( tic.val - usedMax ) > interval / 20 )
+                {
+                    return 0;
+                }
+            }
+            break;
+
+        case eTicFull:
+            if ( t == NULL )
+            {
+                tic.val = usedMin;
+                firstTic = true;
+            }
+            else if ( firstTic == true )
+            {
+                tic.val = ticStart;
+                firstTic = false;
+            }
+            else if ( lastTic == true )
+            {
+                lastTic = false;
+                return 0;
+            }
+            else
+            {
+                tic.val += interval;
+                if ( ( tic.val - usedMax ) > interval / 20 )
+                {
+                    tic.val = usedMax;
+                    lastTic = true;
+                }
+            }
+            break;
+    }
+
+    tic.lbl.sprintf( format_single_prec.toLatin1(), tic.val );
+
+    return &tic;
+}
+
+
+void CPlotAxis::setScale( const unsigned int pts )
+{
+    //if ( !initialized )
+    //qWarning( "you try to set the scale before defining the min & max value. not very sensible." );
+    points = pts;
+    scale = pts / ( usedMax - usedMin );
+}
+
+
+void CPlotAxis::resetZoom()
+{
+    setMinMax(limitMin, limitMax);
+}
+
+
+void CPlotAxis::zoom(bool in, int point)
+{
+    qreal min, p, d, factor;
+    if (in)
+        factor = 1/1.1;
+    else
+        factor = 1.1;
+
+    p = pt2val(point);
+    min = (p - usedMin) * (1 - factor) + usedMin;
+    d = min - usedMin * factor;
+
+    setMinMax(min, usedMax * factor + d);
+    move(0);
+}
+
+
+void CPlotAxis::move(int delta_pt)
+{
+    qreal delta_val = pt2val(delta_pt) - pt2val(0);
+    bool f = ! (usedMax - usedMin < limitMax - limitMin);
+    if (f ^ (usedMin + delta_val < limitMin))
+    {
+        delta_val = (limitMin - usedMin);
+    }
+    if (f ^ (usedMax + delta_val > limitMax))
+    {
+        delta_val = (limitMax - usedMax);
+    }
+    setMinMax(usedMin + delta_val, usedMax + delta_val);
+}
diff --git a/src/plot/CPlotAxis.h b/src/plot/CPlotAxis.h
new file mode 100644
index 0000000..59fb590
--- /dev/null
+++ b/src/plot/CPlotAxis.h
@@ -0,0 +1,151 @@
+/**********************************************************************************************
+    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/>.
+
+**********************************************************************************************/
+
+#ifndef CPLOTAXIS_H
+#define CPLOTAXIS_H
+
+#include <QObject>
+
+class QFontMetrics;
+
+class CPlotAxis : public QObject
+{
+    Q_OBJECT
+        public:
+        CPlotAxis(QObject * parent);
+        virtual ~CPlotAxis();
+
+        /// tic mark information structure
+        struct tic_t
+        {
+            tic_t(){val=0;lbl="";}
+            qreal val;
+            QString lbl;
+        };
+
+        ///tic type
+        enum tictype_e
+        {
+            eNoTic,               /**< no tics are produced*/
+            eTicMinMax,           /**< only min max tics are produced*/
+            eTicNorm,             /**< tics by interval*/
+            eTicFull              /**< minmax && norm*/
+        };
+
+        ///zoom in/out with a given point as static
+        virtual void zoom(bool in, int point);
+        ///set the desired minimum and maximum value equal to limit values
+        virtual void resetZoom();
+        ///add delta_pt to min and max values
+        virtual void move(int delta);
+        ///set the desired minimum and maximum value
+        virtual void setMinMax(qreal givenMin, qreal givenMax);
+        ///set the limit minimum and maximum value
+        virtual void setLimits(qreal min, qreal max);
+        ///set the scale factor for a given size in points
+        virtual void setScale(const unsigned int pts);
+        ///calculate format for the given value
+        virtual const QString fmtsgl(qreal val);
+        ///calculate format for the given value
+        virtual const QString fmtdbl(qreal val);
+        ///get the maximum width of a scale with provided fontmetrics
+        virtual int getScaleWidth(const QFontMetrics& m);
+        ///get a new ticmark object
+        virtual const tic_t* ticmark(const tic_t * t = NULL);
+        /// get the total limits and the used ones
+        virtual void getLimits(qreal& limMin, qreal& limMax, qreal& useMin, qreal& useMax);
+
+        inline int val2pt( qreal val )
+        {
+            if ( scale == 0 )
+            {
+                return 0;
+            }
+            return ( int ) ( ( val - usedMin ) * scale + 0.5 );
+        }
+
+        inline qreal pt2val( int pt )
+        {
+            if ( scale == 0 )
+            {
+                return 0;
+            }
+            return ( qreal ) ( ( (qreal)pt - 0.5 ) / scale + usedMin );
+        }
+
+        void setAutoscale(bool on){autoscale = on;}
+
+        inline tictype_e getTicType(){return ticType;}
+        inline tictype_e setTicType(tictype_e t)
+        {
+            tictype_e old = ticType;
+            ticType = t;
+            return old;
+        }
+
+        qreal min(){return usedMin;}
+        qreal max(){return usedMax;}
+
+    protected:
+        virtual void calc();
+
+        ///true if axis has been initialized
+        bool initialized;
+        ///true if autoscaling
+        bool autoscale;
+
+        ///scalefactor
+        qreal scale;
+
+        ///the actual applied min value
+        qreal usedMin;
+        ///the actual applied max value
+        qreal usedMax;
+
+        qreal limitMin;
+        qreal limitMax;
+
+        ///the intervall of the ticmarks
+        qreal interval;
+
+        ///start value of the tic marks
+        qreal ticStart;
+
+        /// this is set to -1 by default
+        /**
+            a value > 0 will override the dynamic value in getScaleWidth();
+        */
+        qint32 scaleWidth;
+
+        ///the ticmark generation type
+        tictype_e ticType;
+        ///local copy of the last ticmark object
+        tic_t tic;
+
+        /// used by ticmark()
+        bool firstTic;
+        /// used by ticmark()
+        bool lastTic;
+
+        ///points of dimension
+        quint32 points;
+
+};
+
+#endif //CPLOTAXIS_H
+
diff --git a/src/plot/CPlotAxisTime.cpp b/src/plot/CPlotAxisTime.cpp
new file mode 100644
index 0000000..01d3852
--- /dev/null
+++ b/src/plot/CPlotAxisTime.cpp
@@ -0,0 +1,130 @@
+/**********************************************************************************************
+    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 "plot/CPlotAxisTime.h"
+
+#include <QtWidgets>
+
+CPlotAxisTime::CPlotAxisTime(QObject * parent)
+: CPlotAxis(parent)
+{
+
+}
+
+
+CPlotAxisTime::~CPlotAxisTime()
+{
+
+}
+
+
+void CPlotAxisTime::calc()
+{
+
+    int dSec    = usedMax - usedMin;
+    ticStart    = usedMin;
+    strFormat   = "hh:mm:ss";
+
+    if(dSec < 20)
+    {
+        interval = 1;
+        ticStart = usedMin;
+    }
+    else if(dSec < 100)
+    {
+        interval = 5;
+        ticStart = qCeil(usedMin / interval) * interval;
+    }
+    else if(dSec < 200)
+    {
+        interval = 10;
+        ticStart = qCeil(usedMin / interval) * interval;
+    }
+    else if(dSec < 600)
+    {
+        interval = 30;
+        ticStart = qCeil(usedMin / interval) * interval;
+    }
+    else if(dSec < 1200)
+    {
+        interval = 60;
+        ticStart = qCeil(usedMin / interval) * interval;
+    }
+    else if(dSec < 6000)
+    {
+        interval = 600;
+        ticStart = qCeil(usedMin / interval) * interval;
+    }
+    else if(dSec < 12000)
+    {
+        interval = 600;
+        ticStart = qCeil(usedMin / interval) * interval;
+    }
+    else if(dSec < 36000)
+    {
+        interval = 1800;
+        ticStart = qCeil(usedMin / interval) * interval;
+    }
+    else if(dSec < 72000)
+    {
+        interval = 3600;
+        ticStart = qCeil(usedMin / interval) * interval;
+    }
+    else if(dSec < 216000)
+    {
+        interval = 10800;
+        ticStart = qCeil(usedMin / interval) * interval;
+    }
+    else
+    {
+        qDebug() << "ouch";
+    }
+
+    if ( autoscale )
+    {
+        usedMin = qFloor( usedMin / interval ) * interval;
+        usedMax = qCeil( usedMax / interval ) * interval;
+    }
+    else
+    {
+        usedMin = usedMin;
+        usedMax = usedMax;
+    }
+
+    int t1 = ( int )( usedMin / interval + 0.5);
+    ticStart = interval * t1;
+    if ( ticStart < usedMin )
+    {
+        ticStart += interval;
+    }
+
+}
+
+
+const CPlotAxis::tic_t* CPlotAxisTime::ticmark( const tic_t * t )
+{
+    const tic_t * _tic_ = CPlotAxis::ticmark(t);
+    if(_tic_)
+    {
+        QDateTime time = QDateTime::fromTime_t(tic.val);
+        time.setTimeSpec(Qt::LocalTime);
+        tic.lbl = time.toString(strFormat);
+    }
+
+    return _tic_;
+}
diff --git a/src/mouse/IScrOpt.h b/src/plot/CPlotAxisTime.h
similarity index 63%
copy from src/mouse/IScrOpt.h
copy to src/plot/CPlotAxisTime.h
index d0c8e52..80dfdf5 100644
--- a/src/mouse/IScrOpt.h
+++ b/src/plot/CPlotAxisTime.h
@@ -16,36 +16,29 @@
 
 **********************************************************************************************/
 
-#ifndef ISCROPT_H
-#define ISCROPT_H
+#ifndef CPLOTAXISTIME_H
+#define CPLOTAXISTIME_H
 
-#include <QWidget>
-#include <QPixmap>
-#include <QRect>
+#include "plot/CPlotAxis.h"
 
-class QMouseEvent;
-
-class IScrOpt : public QWidget
+class CPlotAxisTime : public CPlotAxis
 {
+    Q_OBJECT
     public:
-        IScrOpt(QWidget * parent);
-        virtual ~IScrOpt();
-
-
-        void setOrigin(const QPoint& pos){origin = pos;}
-        const QPoint& getOrigin(){return origin;}
+        CPlotAxisTime(QObject * parent);
+        virtual ~CPlotAxisTime();
 
-        virtual void draw(QPainter& p) = 0;
-        virtual void mouseMoveEvent(QMouseEvent *);
+        ///calculate format for the given value
+        const QString fmtsgl(qreal /*val*/){return strFormat;}
+        ///calculate format for the given value
+        const QString fmtdbl(qreal /*val*/){return strFormat;}
 
+        const tic_t* ticmark( const tic_t * t );
     protected:
+        void calc();
 
-        QPoint origin;
-
-        QPoint mousePos;
-
-
+        QString strFormat;
 };
 
-#endif //ISCROPT_H
+#endif //CPLOTAXISTIME_H
 
diff --git a/src/plot/CPlotData.cpp b/src/plot/CPlotData.cpp
new file mode 100644
index 0000000..35aa6a2
--- /dev/null
+++ b/src/plot/CPlotData.cpp
@@ -0,0 +1,90 @@
+/**********************************************************************************************
+    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 "plot/CPlotData.h"
+#include "plot/CPlotAxis.h"
+#include "plot/CPlotAxisTime.h"
+#include "units/IUnit.h"
+
+CPlotData::CPlotData(axistype_e type, QObject * parent)
+: QObject(parent)
+, grid(true)
+, badData(true)
+, axisType(type)
+, xmin(0)
+, xmax(0)
+, ymin(0)
+, ymax(0)
+{
+    if(type == eAxisLinear)
+    {
+        xaxis = new CPlotAxis(this);
+    }
+    else
+    {
+        xaxis = new CPlotAxisTime(this);
+    }
+    xaxis->setAutoscale(false);
+    yaxis = new CPlotAxis(this);
+}
+
+
+CPlotData::~CPlotData()
+{
+
+}
+
+
+void CPlotData::setLimits()
+{
+    if(lines.size() == 0 || badData)
+    {
+        return;
+    }
+
+    QList<line_t>::const_iterator line  = lines.begin();
+    if(line == lines.end()) return;
+    QPolygonF::const_iterator p         = line->points.begin();
+
+    xmin = p->x();
+    xmax = p->x();
+    ymin = p->y();
+    ymax = p->y();
+
+    while(line != lines.end())
+    {
+        QPolygonF::const_iterator p = line->points.begin();
+        while(p != line->points.end())
+        {
+            if(p->y() != NOFLOAT)
+            {
+
+                if(p->x() > xmax) xmax = p->x();
+                if(p->x() < xmin) xmin = p->x();
+                if(p->y() > ymax) ymax = p->y();
+                if(p->y() < ymin) ymin = p->y();
+            }
+            ++p;
+        }
+
+        ++line;
+    }
+
+    xaxis->setLimits(xmin,xmax);
+    yaxis->setLimits(ymin,ymax);
+}
diff --git a/src/plot/CPlotData.h b/src/plot/CPlotData.h
new file mode 100644
index 0000000..4e6bf27
--- /dev/null
+++ b/src/plot/CPlotData.h
@@ -0,0 +1,93 @@
+/**********************************************************************************************
+    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/>.
+
+**********************************************************************************************/
+
+#ifndef CPLOTDATA_H
+#define CPLOTDATA_H
+
+
+#include <QObject>
+#include <QColor>
+#include <QPolygonF>
+#include <QPixmap>
+
+class CPlotAxis;
+
+class CPlotData : public QObject
+{
+    public:
+        enum axistype_e {eAxisLinear, eAxisTime};
+
+        CPlotData(axistype_e type, QObject * parent);
+        virtual ~CPlotData();
+
+        ///get a reference to the x axis
+        CPlotAxis& x(){return *xaxis;}
+        ///get a reference to the y axis
+        CPlotAxis& y(){return *yaxis;}
+
+        /// setup all internal data to fit the dynamic range of all data points
+        void setLimits();
+
+        struct line_t
+        {
+            QString label;
+            QColor color;
+            QPolygonF points;
+        };
+
+        /// text shown below the x axis
+        QString xlabel;
+        /// text shown left of the y axis
+        QString ylabel;
+        /// set true for grid
+        bool grid;
+
+        /// list of plot lines
+        QList<line_t> lines;
+        /// marks on line1
+        line_t marks;
+
+        struct point_t
+        {
+            QColor color;
+            QPointF point;
+            QPixmap icon;
+            QString label;
+        };
+
+        QList<QPointF> focus;
+
+        /// vector of plot tags such as waypoints
+        QVector<point_t> tags;
+
+        bool badData;
+
+        axistype_e axisType;
+
+        qreal xmin;
+        qreal xmax;
+        qreal ymin;
+        qreal ymax;
+
+    protected:
+        CPlotAxis * xaxis;
+        CPlotAxis * yaxis;
+};
+
+#endif //CPLOTDATA_H
+
diff --git a/src/plot/CPlotDistance.cpp b/src/plot/CPlotDistance.cpp
new file mode 100644
index 0000000..4f7eac4
--- /dev/null
+++ b/src/plot/CPlotDistance.cpp
@@ -0,0 +1,120 @@
+/**********************************************************************************************
+    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 "plot/CPlotDistance.h"
+#include "plot/CPlotAxisTime.h"
+
+CPlotDistance::CPlotDistance(QWidget *parent)
+    : IPlot(0, CPlotData::eAxisTime, eModeNormal, parent)
+{
+
+}
+
+CPlotDistance::~CPlotDistance()
+{
+
+}
+
+void CPlotDistance::setTrack(CGisItemTrk * track)
+{
+    trk = track;
+    trk->registerPlot(this);
+
+    updateData();
+}
+
+
+void CPlotDistance::updateData()
+{       
+    CPlotData::axistype_e type = data->axisType;
+
+    if(mode == eModeIcon)
+    {
+        setXLabel(trk->getName());
+        setYLabel("");
+    }
+    else
+    {
+        if(type == CPlotData::eAxisLinear)
+        {
+            setXLabel(tr("distance [%1]").arg(IUnit::self().baseunit));
+        }
+        else
+        {
+            setXLabel(tr("time [h]"));
+        }
+        setYLabel(tr("distance. [%1]").arg(IUnit::self().baseunit));
+    }
+
+    clear();
+    if(trk->getTotalElapsedSeconds() == 0)
+    {
+        return;
+    }
+
+    QPolygonF lineDist;
+
+    qreal basefactor = IUnit::self().basefactor;
+    const CGisItemTrk::trk_t& t = trk->getTrackData();
+
+    foreach (const CGisItemTrk::trkseg_t& seg, t.segs)
+    {
+        foreach(const CGisItemTrk::trkpt_t& trkpt, seg.pts)
+        {
+            if(trkpt.flags & CGisItemTrk::trkpt_t::eDeleted)
+            {
+                continue;
+            }
+
+            if(trkpt.distance != NOFLOAT)
+            {
+                lineDist << QPointF(type == CPlotData::eAxisLinear ? trkpt.distance : (qreal)trkpt.time.toTime_t(), trkpt.distance * basefactor);
+            }
+        }
+    }
+
+
+    newLine(lineDist, "GPS");
+    setLimits();
+    resetZoom();
+
+}
+
+void CPlotDistance::setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt)
+{
+    if(pt == 0)
+    {
+        if(posMouse != NOPOINT)
+        {
+            posMouse = NOPOINT;
+            needsRedraw = true;
+        }
+    }
+    else
+    {
+        if(posMouse == NOPOINT)
+        {
+            needsRedraw = true;
+        }
+
+        posMouse.rx() = left  + data->x().val2pt(pt->time.toTime_t());
+        posMouse.ry() = top  +  data->y().val2pt(pt->distance);
+    }
+    update();
+
+}
diff --git a/src/map/CMapMAP.h b/src/plot/CPlotDistance.h
similarity index 72%
copy from src/map/CMapMAP.h
copy to src/plot/CPlotDistance.h
index 42837bf..4922a2a 100644
--- a/src/map/CMapMAP.h
+++ b/src/plot/CPlotDistance.h
@@ -16,21 +16,23 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPMAP_H
-#define CMAPMAP_H
+#ifndef CPLOTDISTANCE_H
+#define CPLOTDISTANCE_H
 
-#include "map/IMap.h"
+#include "plot/IPlot.h"
 
-class CMapDraw;
-
-class CMapMAP : public IMap
+class CPlotDistance : public IPlot
 {
+    Q_OBJECT
     public:
-        CMapMAP(const QString& filename, CMapDraw *parent);
-        virtual ~CMapMAP();
+        CPlotDistance(QWidget * parent);
+        virtual ~CPlotDistance();
+
+        void setTrack(CGisItemTrk * track);
+        void updateData();
+        void setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt);
 
-        void draw(IDrawContext::buffer_t& buf);
 };
 
-#endif //CMAPMAP_H
+#endif //CPLOTDISTANCE_H
 
diff --git a/src/plot/CPlotProfile.cpp b/src/plot/CPlotProfile.cpp
new file mode 100644
index 0000000..4872332
--- /dev/null
+++ b/src/plot/CPlotProfile.cpp
@@ -0,0 +1,134 @@
+/**********************************************************************************************
+    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 "plot/CPlotProfile.h"
+#include "plot/CPlotAxis.h"
+#include "units/IUnit.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "CMainWindow.h"
+
+#include <proj_api.h>
+
+CPlotProfile::CPlotProfile(QWidget * parent)
+    : IPlot(0, CPlotData::eAxisLinear, eModeNormal, parent)
+{
+
+}
+
+CPlotProfile::CPlotProfile(CGisItemTrk *trk, mode_e mode, QWidget *parent)
+    : IPlot(trk, CPlotData::eAxisLinear, mode, parent)
+{
+
+
+    updateData();
+}
+
+CPlotProfile::~CPlotProfile()
+{
+
+}
+
+void CPlotProfile::setTrack(CGisItemTrk * track)
+{
+    trk = track;
+    trk->registerPlot(this);
+
+    updateData();
+}
+
+void CPlotProfile::updateData()
+{
+    CPlotData::axistype_e type = data->axisType;
+
+    if(mode == eModeIcon)
+    {
+        setXLabel(trk->getName());
+        setYLabel("");
+    }
+    else
+    {
+        if(type == CPlotData::eAxisLinear)
+        {
+            setXLabel(tr("distance [%1]").arg(IUnit::self().baseunit));
+        }
+        else
+        {
+            setXLabel(tr("time [h]"));
+        }
+        setYLabel(tr("alt. [%1]").arg(IUnit::self().baseunit));
+    }
+
+    QPolygonF lineEle;
+    QPolygonF lineDem;
+    QPolygonF coords;
+
+    qreal basefactor = IUnit::self().basefactor;
+    const CGisItemTrk::trk_t& t = trk->getTrackData();
+    foreach (const CGisItemTrk::trkseg_t& seg, t.segs)
+    {
+        foreach(const CGisItemTrk::trkpt_t& trkpt, seg.pts)
+        {
+            if(trkpt.flags & CGisItemTrk::trkpt_t::eDeleted)
+            {
+                continue;
+            }
+
+            if(trkpt.ele != NOINT)
+            {
+                lineEle << QPointF(type == CPlotData::eAxisLinear ? trkpt.distance : (qreal)trkpt.time.toTime_t(), trkpt.ele * basefactor);
+                coords  << QPointF(trkpt.lon * DEG_TO_RAD, trkpt.lat * DEG_TO_RAD);
+                lineDem << QPointF(type == CPlotData::eAxisLinear ? trkpt.distance : (qreal)trkpt.time.toTime_t(), NOFLOAT);
+            }
+        }
+    }
+
+    CMainWindow::self().getEelevationAt(coords, lineDem);
+
+    clear();
+    newLine(lineEle, "GPS");
+    if(!lineDem.isEmpty())
+    {
+        addLine(lineDem, "DEM");
+    }
+    setLimits();
+    resetZoom();
+
+}
+
+void CPlotProfile::setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt)
+{
+    if(pt == 0)
+    {
+        if(posMouse != NOPOINT)
+        {
+            posMouse = NOPOINT;
+            needsRedraw = true;
+        }
+    }
+    else
+    {
+        if(posMouse == NOPOINT)
+        {
+            needsRedraw = true;
+        }
+
+        posMouse.rx() = left  + data->x().val2pt(pt->distance);
+        posMouse.ry() = top  +  data->y().val2pt(pt->ele);
+    }
+    update();
+}
diff --git a/src/map/CMapMAP.h b/src/plot/CPlotProfile.h
similarity index 68%
copy from src/map/CMapMAP.h
copy to src/plot/CPlotProfile.h
index 42837bf..3ce827e 100644
--- a/src/map/CMapMAP.h
+++ b/src/plot/CPlotProfile.h
@@ -16,21 +16,24 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPMAP_H
-#define CMAPMAP_H
+#ifndef CPLOTPROFILE_H
+#define CPLOTPROFILE_H
 
-#include "map/IMap.h"
 
-class CMapDraw;
+#include "plot/IPlot.h"
 
-class CMapMAP : public IMap
+class CPlotProfile : public IPlot
 {
+    Q_OBJECT
     public:
-        CMapMAP(const QString& filename, CMapDraw *parent);
-        virtual ~CMapMAP();
+        CPlotProfile(QWidget * parent);
+        CPlotProfile(CGisItemTrk * trk, mode_e mode, QWidget * parent);
+        virtual ~CPlotProfile();
 
-        void draw(IDrawContext::buffer_t& buf);
+        void setTrack(CGisItemTrk * track);
+        void updateData();
+        void setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt);
 };
 
-#endif //CMAPMAP_H
+#endif //CPLOTPROFILE_H
 
diff --git a/src/plot/CPlotSpeed.cpp b/src/plot/CPlotSpeed.cpp
new file mode 100644
index 0000000..bb979b9
--- /dev/null
+++ b/src/plot/CPlotSpeed.cpp
@@ -0,0 +1,115 @@
+/**********************************************************************************************
+    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 "plot/CPlotSpeed.h"
+#include "plot/CPlotAxis.h"
+
+CPlotSpeed::CPlotSpeed(QWidget *parent)
+    : IPlot(0, CPlotData::eAxisLinear, eModeNormal, parent)
+{
+
+}
+
+CPlotSpeed::~CPlotSpeed()
+{
+
+}
+
+void CPlotSpeed::setTrack(CGisItemTrk * track)
+{
+    trk = track;
+    trk->registerPlot(this);
+
+    updateData();
+}
+
+void CPlotSpeed::updateData()
+{
+    CPlotData::axistype_e type = data->axisType;
+
+    if(mode == eModeIcon)
+    {
+        setXLabel(trk->getName());
+        setYLabel("");
+    }
+    else
+    {
+        if(type == CPlotData::eAxisLinear)
+        {
+            setXLabel(tr("distance [%1]").arg(IUnit::self().baseunit));
+        }
+        else
+        {
+            setXLabel(tr("time [h]"));
+        }
+        setYLabel(tr("speed. [%1]").arg(IUnit::self().speedunit));
+    }
+
+    clear();
+    if(trk->getTotalElapsedSeconds() == 0)
+    {
+        return;
+    }
+
+    QPolygonF lineSpeed;
+
+    qreal speedfactor = IUnit::self().speedfactor;
+    const CGisItemTrk::trk_t& t = trk->getTrackData();
+    foreach (const CGisItemTrk::trkseg_t& seg, t.segs)
+    {
+        foreach(const CGisItemTrk::trkpt_t& trkpt, seg.pts)
+        {
+            if(trkpt.flags & CGisItemTrk::trkpt_t::eDeleted)
+            {
+                continue;
+            }
+
+            if(trkpt.speed != NOFLOAT)
+            {
+                lineSpeed << QPointF(type == CPlotData::eAxisLinear ? trkpt.distance : (qreal)trkpt.time.toTime_t(), trkpt.speed * speedfactor);
+            }
+        }
+    }
+
+    newLine(lineSpeed, "GPS");
+    setLimits();
+    resetZoom();
+}
+
+void CPlotSpeed::setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt)
+{
+    if(pt == 0)
+    {
+        if(posMouse != NOPOINT)
+        {
+            posMouse = NOPOINT;
+            needsRedraw = true;
+        }
+    }
+    else
+    {
+        if(posMouse == NOPOINT)
+        {
+            needsRedraw = true;
+        }
+
+        posMouse.rx() = left  + data->x().val2pt(pt->distance);
+        posMouse.ry() = top  +  data->y().val2pt(pt->speed);
+    }
+    update();
+}
diff --git a/src/map/CMapMAP.h b/src/plot/CPlotSpeed.h
similarity index 73%
copy from src/map/CMapMAP.h
copy to src/plot/CPlotSpeed.h
index 42837bf..4f55d9b 100644
--- a/src/map/CMapMAP.h
+++ b/src/plot/CPlotSpeed.h
@@ -16,21 +16,23 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPMAP_H
-#define CMAPMAP_H
+#ifndef CPLOTSPEED_H
+#define CPLOTSPEED_H
 
-#include "map/IMap.h"
+#include "plot/IPlot.h"
 
-class CMapDraw;
-
-class CMapMAP : public IMap
+class CPlotSpeed : public IPlot
 {
+    Q_OBJECT
     public:
-        CMapMAP(const QString& filename, CMapDraw *parent);
-        virtual ~CMapMAP();
+        CPlotSpeed(QWidget * parent);
+        virtual ~CPlotSpeed();
+
+        void setTrack(CGisItemTrk * track);
+        void updateData();
+        void setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt);
 
-        void draw(IDrawContext::buffer_t& buf);
 };
 
-#endif //CMAPMAP_H
+#endif //CPLOTSPEED_H
 
diff --git a/src/plot/CPlotTrack.cpp b/src/plot/CPlotTrack.cpp
new file mode 100644
index 0000000..be68fe1
--- /dev/null
+++ b/src/plot/CPlotTrack.cpp
@@ -0,0 +1,160 @@
+/**********************************************************************************************
+    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 "plot/CPlotTrack.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "canvas/IDrawContext.h"
+
+#include <QtWidgets>
+#include <proj_api.h>
+
+CPlotTrack::CPlotTrack(QWidget *parent)
+    : QWidget(parent)
+    , pjsrc(0)
+    , pjtar(0)
+    , needsRedraw(true)
+    , trk(0)
+    , xoff(0)
+    , yoff(0)
+    , pos(NOPOINTF)
+{
+    pjtar = pj_init_plus("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
+}
+
+CPlotTrack::~CPlotTrack()
+{
+    if(pjtar) pj_free(pjtar);
+    if(pjsrc) pj_free(pjsrc);
+
+}
+
+void CPlotTrack::setTrack(CGisItemTrk * track, const QString& proj)
+{
+    trk = track;
+    pjsrc = pj_init_plus(proj.toLatin1());
+
+    updateData();
+}
+
+void CPlotTrack::updateData()
+{
+    if(trk == 0)
+    {
+        return;
+    }
+
+    const QRectF& boundingRect = trk->getBoundingRect();
+    QRectF r = buffer.rect();
+    r.adjust(5,5,-5,-5);
+
+    pt1 = boundingRect.topLeft();
+    pt2 = boundingRect.bottomRight();
+
+    pj_transform(pjtar, pjsrc, 1, 0, &pt1.rx(), &pt1.ry(), 0);
+    pj_transform(pjtar, pjsrc, 1, 0, &pt2.rx(), &pt2.ry(), 0);
+
+    qreal w = pt2.x() - pt1.x();
+    qreal h = pt2.y() - pt1.y();
+
+    if(qAbs(w) > qAbs(h))
+    {
+        scale.rx() = r.width() / w;
+        scale.ry() = -scale.x();
+    }
+    else
+    {
+        scale.ry() = r.height() / h;
+        scale.rx() = -scale.y();
+    }
+
+    line.clear();
+    const CGisItemTrk::trk_t& t = trk->getTrackData();
+    foreach (const CGisItemTrk::trkseg_t& seg, t.segs)
+    {
+        foreach(const CGisItemTrk::trkpt_t& trkpt, seg.pts)
+        {
+            if(trkpt.flags & CGisItemTrk::trkpt_t::eDeleted)
+            {
+                continue;
+            }
+
+            QPointF pt(trkpt.lon * DEG_TO_RAD, trkpt.lat * DEG_TO_RAD);
+            pj_transform(pjtar, pjsrc, 1, 0, &pt.rx(), &pt.ry(), 0);
+
+            line << (pt - pt1) * scale;
+        }
+    }
+
+    xoff = qRound((buffer.width()  - w * scale.x()) / 2);
+    yoff = qRound((buffer.height() - h * scale.y()) / 2);
+
+
+
+    needsRedraw = true;
+}
+
+void CPlotTrack::setMouseMoveFocus(qreal lon, qreal lat)
+{
+    pos.rx() = lon * DEG_TO_RAD;
+    pos.ry() = lat * DEG_TO_RAD;
+
+    pj_transform(pjtar, pjsrc, 1, 0, &pos.rx(), &pos.ry(), 0);
+    pos = (pos - pt1) * scale;
+    update();
+}
+
+void CPlotTrack::resizeEvent(QResizeEvent * e)
+{
+    QSize s = e->size();
+    setMinimumWidth(s.height());
+
+    buffer = QImage(s.height(), s.height(), QImage::Format_ARGB32);
+
+    updateData();
+}
+
+void CPlotTrack::paintEvent(QPaintEvent * e)
+{
+    QPainter p(this);
+    USE_ANTI_ALIASING(p, true);
+
+    if(needsRedraw)
+    {
+        draw();
+        needsRedraw = false;
+    }
+
+    p.drawImage(0,0,buffer);
+    p.translate(xoff, yoff);
+    p.setPen(Qt::red);
+    p.setBrush(Qt::red);
+    p.drawEllipse(pos,5,5);
+}
+
+void CPlotTrack::draw()
+{
+    QPainter p(&buffer);
+    USE_ANTI_ALIASING(p, true);
+    p.setPen(Qt::black);
+    p.setBrush(Qt::white);
+    p.drawRect(buffer.rect());
+
+    p.translate(xoff,yoff);
+    p.setPen(QPen(Qt::darkBlue,2));
+    p.drawPolyline(line);
+}
diff --git a/src/map/CMapPropSetup.h b/src/plot/CPlotTrack.h
similarity index 57%
copy from src/map/CMapPropSetup.h
copy to src/plot/CPlotTrack.h
index 6aa94a1..0dc4076 100644
--- a/src/map/CMapPropSetup.h
+++ b/src/plot/CPlotTrack.h
@@ -16,37 +16,49 @@
 
 **********************************************************************************************/
 
-#ifndef CMAPPROPSETUP_H
-#define CMAPPROPSETUP_H
+#ifndef CPLOTTRACK_H
+#define CPLOTTRACK_H
 
+#include <QWidget>
+#include <proj_api.h>
 
-#include "IMapProp.h"
-#include "ui_IMapPropSetup.h"
+class CGisItemTrk;
 
-class CMapPropSetup : public IMapProp, private Ui::IMapPropSetup
+class CPlotTrack : public QWidget
 {
-    Q_OBJECT
     public:
-        CMapPropSetup(IMap * mapfile, CMapDraw * map);
-        virtual ~CMapPropSetup();
+        CPlotTrack(QWidget * parent);
+        virtual ~CPlotTrack();
 
-    protected slots:
-        void slotPropertiesChanged();
+        void setTrack(CGisItemTrk * track, const QString &proj = "+init=epsg:3857");
+        void updateData();
+        void setMouseMoveFocus(qreal lon, qreal lat);
 
     protected:
         void resizeEvent(QResizeEvent * e);
+        void paintEvent(QPaintEvent * e);
 
-    private slots:
-        void slotScaleChanged(const QPointF& s);
-        void slotSetMinScale(bool checked);
-        void slotSetMaxScale(bool checked);
 
     private:
-        void updateScaleLabel();
+        void draw();
 
-        static QPointF scale;
+        projPJ  pjsrc;
+        projPJ  pjtar;
 
+        bool needsRedraw;
+        CGisItemTrk * trk;
+        QImage buffer;
+
+        QPointF pt1;
+        QPointF pt2;
+        QPointF scale;
+        QPolygonF line;
+
+        qint32 xoff;
+        qint32 yoff;
+
+        QPointF pos;
 };
 
-#endif //CMAPPROPSETUP_H
+#endif //CPLOTTRACK_H
 
diff --git a/src/plot/IPlot.cpp b/src/plot/IPlot.cpp
new file mode 100644
index 0000000..dfd7ec1
--- /dev/null
+++ b/src/plot/IPlot.cpp
@@ -0,0 +1,836 @@
+/**********************************************************************************************
+    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 "plot/IPlot.h"
+#include "plot/CPlotAxis.h"
+
+#include "canvas/CCanvas.h"
+#include "CMainWindow.h"
+
+#include <QtWidgets>
+
+QPen IPlot::pens[] =
+{
+    QPen(Qt::darkBlue,3,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , QPen(QColor("#C00000"),3,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , QPen(Qt::yellow,3,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , QPen(Qt::green,3,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+
+};
+
+QPen IPlot::pensThin[] =
+{
+    QPen(Qt::darkBlue,2,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , QPen(Qt::darkRed,2,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , QPen(Qt::darkYellow,2,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , QPen(Qt::darkGreen,2,Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+
+};
+
+QColor IPlot::colors[] =
+{
+    QColor(Qt::blue)
+    , QColor(0,0,0,0)
+    , QColor(0,0,0,0)
+    , QColor(0,0,0,0)
+
+};
+
+
+IPlot::IPlot(CGisItemTrk *trk, CPlotData::axistype_e type, mode_e mode, QWidget *parent)
+    : QWidget(parent)
+    , mode(mode)
+    , needsRedraw(true)
+    , showScale(true)
+    , thinLine(false)
+    , posMouse(NOPOINT)
+    , trk(trk)
+    , fm(font())
+    , left(0)
+    , right(0)
+    , top(0)
+    , bottom(0)
+    , deadAreaX(0)
+    , deadAreaY(0)
+    , fontWidth(0)
+    , fontHeight(0)
+    , scaleWidthX1(0)
+    , scaleWidthY1(0)
+
+{
+    setMouseTracking(true);
+
+    if(trk) trk->registerPlot(this);
+
+    data = new CPlotData(type, this);
+
+    if(mode == eModeIcon)
+    {
+        showScale = false;
+        thinLine = true;
+    }
+
+}
+
+IPlot::~IPlot()
+{
+    if(trk) trk->unregisterPlot(this);
+}
+
+void IPlot::clear()
+{
+    data->lines.clear();
+    data->marks.points.clear();
+    data->tags.clear();
+    data->badData = true;
+    update();
+}
+
+
+void IPlot::setYLabel(const QString& str)
+{
+    data->ylabel = str;
+    setSizes();
+    update();
+}
+
+
+void IPlot::setXLabel(const QString& str)
+{
+    data->xlabel = str;
+    setSizes();
+    update();
+}
+
+
+void IPlot::newLine(const QPolygonF& line, const QString& label)
+{
+    data->lines.clear();
+
+    QRectF r = line.boundingRect();
+    if((r.height() < 0) || (r.width() < 0))
+    {
+        data->badData = true;
+        return;
+    }
+
+    CPlotData::line_t l;
+    l.points    = line;
+    l.label     = label;
+
+    data->badData = false;
+    data->lines << l;
+    setSizes();
+    data->x().setScale( rectGraphArea.width() );
+    data->y().setScale( rectGraphArea.height() );
+
+    needsRedraw = true;
+    update();
+
+}
+
+void IPlot::addLine(const QPolygonF& line, const QString& label)
+{
+    QRectF r = line.boundingRect();
+    if(!r.isValid())
+    {
+        return;
+    }
+
+    CPlotData::line_t l;
+    l.points    = line;
+    l.label     = label;
+
+    data->lines << l;
+    setSizes();
+    data->x().setScale( rectGraphArea.width() );
+    data->y().setScale( rectGraphArea.height() );
+
+    needsRedraw = true;
+    update();
+}
+
+
+void IPlot::setLimits()
+{
+    data->setLimits();
+}
+
+void IPlot::resetZoom()
+{
+    data->x().resetZoom();
+    data->y().resetZoom();
+    setSizes();
+
+//    initialYMin = data->y().min();
+//    initialYMax = data->y().max();
+
+    needsRedraw = true;
+    update();
+}
+
+
+void IPlot::paintEvent(QPaintEvent * e)
+{
+    QPainter p(this);
+    draw(p);
+}
+
+void IPlot::resizeEvent(QResizeEvent * e)
+{
+    setSizes();
+
+//    initialYMin = data->y().min();
+//    initialYMax = data->y().max();
+
+    buffer = QImage(e->size(), QImage::Format_ARGB32);
+
+    needsRedraw = true;
+    update();
+}
+
+void IPlot::leaveEvent(QEvent * e)
+{
+    needsRedraw = true;
+    posMouse    = NOPOINT;
+
+    if(trk) trk->setMouseFocusByDistance(NOFLOAT, CGisItemTrk::eFocusMouseMove, this);
+
+    QApplication::restoreOverrideCursor();
+    update();
+}
+
+
+void IPlot::enterEvent(QEvent * e)
+{
+    needsRedraw = true;
+    QApplication::setOverrideCursor(Qt::PointingHandCursor);
+    update();
+}
+
+void IPlot::draw(QPainter& p)
+{
+    if(needsRedraw)
+    {
+        draw();
+        needsRedraw = false;
+    }
+
+    p.drawImage(0,0,buffer);
+
+    drawDecoration(p);
+}
+
+void IPlot::mouseMoveEvent(QMouseEvent * e)
+{
+    posMouse = NOPOINT;
+    if(rectGraphArea.contains(e->pos()))
+    {
+        posMouse = e->pos();
+
+        // set point of focus at track object
+        qreal x = data->x().pt2val(posMouse.x() - left);
+        if(data->axisType == CPlotData::eAxisLinear)
+        {
+            if(trk) trk->setMouseFocusByDistance(x, CGisItemTrk::eFocusMouseMove, this);
+        }
+        else if(data->axisType == CPlotData::eAxisTime)
+        {
+            if(trk) trk->setMouseFocusByTime(x, CGisItemTrk::eFocusMouseMove, this);
+        }
+
+        // update canvas if visible
+        CCanvas * canvas = CMainWindow::self().getVisibleCanvas();
+        if(canvas)
+        {
+            canvas->update();
+        }
+        e->accept();
+    }
+    update();
+}
+
+void IPlot::mousePressEvent(QMouseEvent * e)
+{
+    posMouse = NOPOINT;
+    if((e->button() == Qt::LeftButton) && rectGraphArea.contains(e->pos()))
+    {
+        posMouse = e->pos();
+
+        if(mode == eModeIcon)
+        {
+            trk->edit();
+        }
+        else
+        {
+            // set point of focus at track object
+            qreal x = data->x().pt2val(posMouse.x() - left);
+            if(data->axisType == CPlotData::eAxisLinear)
+            {
+                if(trk) trk->setMouseFocusByDistance(x, CGisItemTrk::eFocusMouseClick, this);
+            }
+            else if(data->axisType == CPlotData::eAxisTime)
+            {
+                if(trk) trk->setMouseFocusByTime(x, CGisItemTrk::eFocusMouseClick, this);
+            }
+
+            // update canvas if visible
+            CCanvas * canvas = CMainWindow::self().getVisibleCanvas();
+            if(canvas)
+            {
+                canvas->update();
+            }
+        }
+        e->accept();
+    }
+    update();
+}
+
+void IPlot::setSizes()
+{
+    fm = QFontMetrics(CMainWindow::self().getMapFont());
+    left = 0;
+
+    scaleWidthX1    = showScale ? data->x().getScaleWidth( fm ) : 0;
+    scaleWidthY1    = showScale ? data->y().getScaleWidth( fm ) : 0;
+
+    scaleWidthY1    = scaleWidthX1 > scaleWidthY1 ? scaleWidthX1 : scaleWidthY1;
+
+    fontWidth       = fm.maxWidth();
+    fontHeight      = fm.height();
+    deadAreaX       = fontWidth >> 1;
+    deadAreaY       = ( fontHeight + 1 ) >> 1;
+
+    setLRTB();
+    setSizeIconArea();
+    setSizeXLabel();
+    setSizeYLabel();
+    setSizeTrackInfo();
+    setSizeDrawArea();
+
+}
+
+void IPlot::setLRTB()
+{
+    left = 0;
+
+    left += data->ylabel.isEmpty() ? 0 : fontHeight;
+    left += scaleWidthY1;
+    left += deadAreaX;
+
+    right = size().width();
+    right -= deadAreaX;
+    right -= scaleWidthX1 / 2;
+
+    top = 0;
+    if(!data->tags.isEmpty())
+    {
+        top += fontHeight;
+        top += 16;
+    }
+    top += deadAreaY;
+
+    bottom = size().height();
+    bottom -= data->xlabel.isEmpty() ? 0 : fontHeight;
+    // tick marks
+    if(scaleWidthX1)
+    {
+        bottom -= fontHeight;
+    }
+    bottom -= deadAreaY;
+
+    if(!data->xlabel.isEmpty())
+    {
+        bottom -= deadAreaY;
+    }
+
+    if(!data->tags.isEmpty() /*&& CResources::self().showTrackProfileEleInfo()*/)
+    {
+        bottom -= fontHeight;
+    }
+}
+
+
+void IPlot::setSizeIconArea()
+{
+    rectIconArea = QRect(left, deadAreaY, right - left, 16 + fontHeight + deadAreaY);
+}
+
+void IPlot::setSizeXLabel()
+{
+    int y;
+    if ( data->xlabel.isEmpty() )
+    {
+        rectX1Label = QRect( 0, 0, 0, 0 );
+    }
+    else
+    {
+        rectX1Label.setWidth( right - left );
+        rectX1Label.setHeight( fontHeight );
+        y = ( size().height() - rectX1Label.height()) - deadAreaY;
+        if(!data->tags.isEmpty() /*&& CResources::self().showTrackProfileEleInfo()*/)
+        {
+            y -= fontHeight;
+        }
+
+        rectX1Label.moveTopLeft( QPoint( left, y ) );
+    }
+}
+
+void IPlot::setSizeYLabel()
+{
+    if ( data->ylabel.isEmpty() )
+    {
+        rectY1Label = QRect( 0, 0, 0, 0 );
+    }
+    else
+    {
+        rectY1Label.setWidth( bottom - top );
+        rectY1Label.setHeight( fontHeight );
+        rectY1Label.moveTopLeft( QPoint( size().height() - bottom, 0 ) );
+    }
+}
+
+void IPlot::setSizeTrackInfo()
+{
+    if(data->tags.isEmpty() /*|| !CResources::self().showTrackProfileEleInfo()*/)
+    {
+        rectTrackInfo = QRect();
+        return;
+    }
+
+    rectTrackInfo.setWidth(right - left);
+    rectTrackInfo.setHeight(fontHeight);
+    rectTrackInfo.moveLeft(left);
+    rectTrackInfo.moveTop(size().height() - fontHeight);
+}
+
+void IPlot::setSizeDrawArea()
+{
+    rectGraphArea.setWidth( right - left );
+    rectGraphArea.setHeight( bottom - top );
+    rectGraphArea.moveTopLeft( QPoint( left, top ) );
+
+    data->x().setScale( rectGraphArea.width() );
+    data->y().setScale( rectGraphArea.height() );
+}
+
+
+void IPlot::draw()
+{
+    buffer.fill(Qt::transparent);
+    QPainter p(&buffer);
+    USE_ANTI_ALIASING(p, true);
+
+    if(mode == eModeNormal)
+    {
+        p.fillRect(rect(),Qt::white);
+    }
+    else if(mode == eModeIcon)
+    {
+        QRect r = rect();
+        r.adjust(2,2,-2,-2);
+        if(underMouse() || posMouse != NOPOINT)
+        {
+            p.setPen(CCanvas::penBorderBlue);
+            p.setOpacity(1.0);
+        }
+        else
+        {
+            p.setPen(CCanvas::penBorderBlack);
+            p.setOpacity(0.6);
+        }
+        p.setBrush(QColor(255,255,255,255));
+
+        PAINT_ROUNDED_RECT(p,r);
+    }
+
+    if(data->lines.isEmpty() || data->badData)
+    {
+        p.drawText(rect(), Qt::AlignCenter, tr("No or bad data."));
+        return;
+    }
+
+    p.setFont(CMainWindow::self().getMapFont());
+//    drawTags(p);
+    p.setClipping(true);
+    p.setClipRect(rectGraphArea);
+    drawData(p);
+    p.setClipping(false);
+    drawLabels(p);
+    if(showScale)
+    {
+        drawXScale(p);
+        drawYScale(p);
+    }
+    drawGridX(p);
+    drawGridY(p);
+    drawXTic(p);
+    drawYTic(p);
+    p.setPen(QPen(Qt::black,2));
+    p.drawRect(rectGraphArea);
+
+    drawLegend(p);
+}
+
+void IPlot::drawData(QPainter& p)
+{
+    int penIdx = 0;
+    int ptx, pty, oldPtx;
+    QList<CPlotData::line_t> lines                  = data->lines;
+    QList<CPlotData::line_t>::const_iterator line   = lines.begin();
+
+    CPlotAxis& xaxis = data->x();
+    CPlotAxis& yaxis = data->y();
+
+    while(line != lines.end())
+    {
+        QPolygonF background;
+        QPolygonF foreground;
+
+        const QPolygonF& polyline       = line->points;
+        QPolygonF::const_iterator point = polyline.begin();
+
+        ptx = left   + xaxis.val2pt( point->x() );
+        pty = bottom - yaxis.val2pt( point->y() );
+        oldPtx = ptx;
+
+        background << QPointF(left,bottom);
+        background << QPointF(left,pty);
+        background << QPointF(ptx,pty);
+        foreground << QPointF(ptx,pty);
+
+        while(point != polyline.end())
+        {
+            ptx = left   + xaxis.val2pt( point->x() );
+            pty = bottom - yaxis.val2pt( point->y() );
+
+            if(oldPtx == ptx)
+            {
+                ++point;
+                continue;
+            }
+            oldPtx = ptx;
+
+            if(ptx >= left && ptx <= right)
+            {
+                background << QPointF(ptx,pty);
+                foreground << QPointF(ptx,pty);
+            }
+            ++point;
+        }
+
+        background << QPointF(right,pty);
+        background << QPointF(right,bottom);
+
+//        QLinearGradient gradient(0, bottom - yaxis.val2pt(initialYMin), 0, bottom - yaxis.val2pt(initialYMax));
+//        gradient.setColorAt(0, colors[penIdx]);
+//        gradient.setColorAt(1, QColor(0,0,0,0));
+        p.setPen(Qt::NoPen);
+//        p.setBrush(gradient);
+        p.setBrush(colors[penIdx]);
+        p.drawPolygon(background);
+
+        p.setPen(thinLine ? pensThin[penIdx++] : pens[penIdx++]);
+        p.setBrush(Qt::NoBrush);
+        p.drawPolyline(foreground);
+
+        ++line;
+    }
+}
+
+void IPlot::drawLabels( QPainter &p )
+{
+    p.setPen(Qt::darkBlue);
+
+    if ( rectX1Label.isValid() )
+    {
+        p.drawText( rectX1Label, Qt::AlignCenter, data->xlabel );
+    }
+
+    p.save();
+    QMatrix m = p.matrix();
+    m.translate( 0, size().height() );
+    m.rotate( -90 );
+    p.setMatrix( m );
+
+    if ( rectY1Label.isValid() )
+    {
+        p.drawText( rectY1Label, Qt::AlignCenter, data->ylabel );
+    }
+    p.restore();
+}
+
+void IPlot::drawXScale( QPainter &p )
+{
+    QRect recText;
+
+    if ( data->x().getTicType() == CPlotAxis::eNoTic )
+    {
+        return ;
+    }
+
+    p.setPen(Qt::darkBlue);
+    recText.setHeight( fontHeight );
+    recText.setWidth( scaleWidthX1 );
+
+    int ix;
+    int ix_ = -1;
+    int iy;
+
+    iy = bottom + deadAreaY;
+    const CPlotAxis::tic_t * t = data->x().ticmark();
+    while ( t )
+    {
+        ix = left + data->x().val2pt( t->val ) - ( scaleWidthX1 + 1 ) / 2;
+        if ( ( ( ix_ < 0 ) || ( ( ix - ix_ ) > scaleWidthX1 + 5 ) ) && !t->lbl.isEmpty() )
+        {
+            recText.moveTopLeft( QPoint( ix, iy ) );
+            p.drawText( recText, Qt::AlignCenter, t->lbl );
+            ix_ = ix;
+        }
+        t = data->x().ticmark( t );
+    }
+
+    qreal limMin, limMax, useMin, useMax;
+    data->x().getLimits(limMin, limMax, useMin, useMax);
+
+    if((limMax - limMin) <= (useMax - useMin)) return;
+
+    qreal scale = (right - left) / (limMax - limMin);
+    //     qreal val   = data->x().pt2val(0);
+
+    int x = left + (useMin - limMin) * scale;
+    int y = bottom + 5;
+    int w = (useMax - useMin) * scale;
+
+    p.setPen(QPen(Qt::red,3));
+    p.drawLine(x,y, x + w, y);
+
+}
+
+
+void IPlot::drawYScale( QPainter &p )
+{
+    QString format_single_prec;
+    QRect recText;
+    if ( data->y().getTicType() == CPlotAxis::eNoTic )
+        return ;
+
+    p.setPen(Qt::darkBlue);
+    recText.setHeight( fontHeight );
+    recText.setWidth( scaleWidthY1 );
+
+    int ix;
+    int iy;
+
+    ix = left - scaleWidthY1 - deadAreaX;
+
+    qreal limMin, limMax, useMin, useMax;
+    data->y().getLimits(limMin, limMax, useMin, useMax);
+
+    // draw min/max lables 1st;
+    QRect recTextMin;
+    QRect recTextMax;
+
+    format_single_prec = data->y().fmtsgl(data->ymin);
+    if(data->ymin >= useMin)
+    {
+        iy = bottom - data->y().val2pt( data->ymin ) - fontHeight / 2;
+        recText.moveTopLeft( QPoint( ix, iy ) );
+        p.drawText( recText, Qt::AlignRight, QString().sprintf( format_single_prec.toLatin1().data(), data->ymin  ));
+        recTextMin = recText;
+    }
+    format_single_prec = data->y().fmtsgl(data->ymax);
+    if(data->ymax <= useMax)
+    {
+        iy = bottom - data->y().val2pt( data->ymax ) - fontHeight / 2;
+        recText.moveTopLeft( QPoint( ix, iy ) );
+        p.drawText( recText, Qt::AlignRight, QString().sprintf( format_single_prec.toLatin1().data(), data->ymax  ));
+        recTextMax = recText;
+    }
+
+    // draw tic marks
+    const CPlotAxis::tic_t * t = data->y().ticmark();
+    while ( t )
+    {
+        iy = bottom - data->y().val2pt( t->val ) - fontHeight / 2;
+
+        recText.moveTopLeft( QPoint( ix, iy ) );
+
+        if(!recTextMin.intersects(recText) && !recTextMax.intersects(recText))
+        {
+            p.drawText( recText, Qt::AlignRight, t->lbl );
+        }
+
+        t = data->y().ticmark( t );
+    }
+
+    if((limMax - limMin) <= (useMax - useMin)) return;
+
+    qreal scale = (top - bottom) / (limMax - limMin);
+    //     qreal val   = data->y().pt2val(0);
+
+    int x = left - 5;
+    int y = bottom + (useMin - limMin) * scale;
+    int h = (useMax - useMin) * scale;
+
+    p.setPen(QPen(Qt::red,3));
+    p.drawLine(x,y, x, y + h);
+
+}
+
+
+void IPlot::drawGridX( QPainter &p )
+{
+    int ix;
+    int iy, dy;
+
+    CPlotAxis::tictype_e oldtic = data->x().setTicType( CPlotAxis::eTicNorm );
+
+    dy = rectGraphArea.height();
+    const CPlotAxis::tic_t * t = data->x().ticmark();
+
+    QPen oldpen = p.pen();
+    p.setPen( QPen( QColor(0,150,0,128), 1, Qt::DotLine ) );
+
+    iy = rectGraphArea.top();
+    while ( t )
+    {
+        ix = left + data->x().val2pt( t->val );
+        p.drawLine( ix, iy, ix, iy + dy );
+        t = data->x().ticmark( t );
+    }
+    p.setPen( oldpen );
+    data->x().setTicType( oldtic );
+}
+
+
+void IPlot::drawGridY( QPainter &p )
+{
+    int ix, dx;
+    int iy;
+
+    CPlotAxis::tictype_e oldtic = data->y().setTicType( CPlotAxis::eTicNorm );
+    dx = rectGraphArea.width();
+    const CPlotAxis::tic_t * t = data->y().ticmark();
+
+    QPen oldpen = p.pen();
+    p.setPen( QPen( QColor(0,150,0,128), 1, Qt::DotLine ) );
+
+    ix = rectGraphArea.left();
+    while ( t )
+    {
+        iy = bottom - data->y().val2pt( t->val );
+        p.drawLine( ix, iy, ix + dx, iy );
+        t = data->y().ticmark( t );
+    }
+
+    // draw min/max lines
+    qreal limMin, limMax, useMin, useMax;
+    data->y().getLimits(limMin, limMax, useMin, useMax);
+
+    if(data->ymin > useMin)
+    {
+        iy = bottom - data->y().val2pt( data->ymin );
+        p.drawLine( ix, iy, ix + dx, iy );
+    }
+    if(data->ymax < useMax)
+    {
+        iy = bottom - data->y().val2pt( data->ymax );
+        p.drawLine( ix, iy, ix + dx, iy );
+    }
+
+    p.setPen( oldpen );
+    data->y().setTicType( oldtic );
+}
+
+void IPlot::drawXTic( QPainter & p )
+{
+    int ix;
+    int iyb, iyt;
+    const CPlotAxis::tic_t * t = data->x().ticmark();
+
+    p.setPen(QPen(Qt::black,2));
+    iyb = rectGraphArea.bottom();
+    iyt = rectGraphArea.top();
+    while ( t )
+    {
+        ix = left + data->x().val2pt( t->val );
+        p.drawLine( ix, iyb, ix, iyb - 5 );
+        p.drawLine( ix, iyt, ix, iyt + 5 );
+        t = data->x().ticmark( t );
+    }
+}
+
+
+void IPlot::drawYTic( QPainter &p )
+{
+    int ixl, ixr;
+    int iy;
+    const CPlotAxis::tic_t * t = data->y().ticmark();
+
+    p.setPen(QPen(Qt::black,2));
+    ixl = rectGraphArea.left();
+    ixr = rectGraphArea.right();
+    while ( t )
+    {
+        iy = bottom - data->y().val2pt( t->val );
+        p.drawLine( ixl, iy, ixl + 5, iy );
+        p.drawLine( ixr, iy, ixr - 5, iy );
+        t = data->y().ticmark( t );
+    }
+}
+
+void IPlot::drawLegend(QPainter& p)
+{
+    if(data->lines.size() < 2) return;
+
+    int penIdx = 0;
+    QFontMetrics fm(p.font());
+    int h = fm.height();
+
+    int x = rectGraphArea.left() + 10;
+    int y = rectGraphArea.top()  + 2 + h;
+
+    QList<CPlotData::line_t> lines                  = data->lines;
+    QList<CPlotData::line_t>::const_iterator line   = lines.begin();
+
+    while(line != lines.end())
+    {
+        p.setPen(Qt::black);
+        p.drawText(x + 30 ,y,line->label);
+        p.setPen(pens[penIdx++]);
+        p.drawLine(x, y, x + 20, y);
+
+        y += fm.height();
+        ++line;
+    }
+
+}
+
+void IPlot::drawDecoration( QPainter &p )
+{
+
+    if(posMouse != NOPOINT)
+    {
+        p.setPen(QPen(Qt::red,2));
+        p.drawLine(posMouse.x(), top, posMouse.x(), bottom);
+    }
+}
+
diff --git a/src/plot/IPlot.h b/src/plot/IPlot.h
new file mode 100644
index 0000000..6160548
--- /dev/null
+++ b/src/plot/IPlot.h
@@ -0,0 +1,128 @@
+/**********************************************************************************************
+    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/>.
+
+**********************************************************************************************/
+
+#ifndef IPLOT_H
+#define IPLOT_H
+
+#include <QWidget>
+#include "plot/CPlotData.h"
+#include "gis/trk/CGisItemTrk.h"
+
+class IPlot : public QWidget
+{
+    Q_OBJECT
+    public:
+        enum mode_e {eModeNormal, eModeIcon};
+
+        IPlot(CGisItemTrk * trk, CPlotData::axistype_e type, mode_e mode, QWidget * parent);
+        virtual ~IPlot();
+
+        virtual void updateData() = 0;
+        virtual void setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt) = 0;
+
+    protected:
+        void setYLabel(const QString& str);
+        void setXLabel(const QString& str);
+        void clear();
+        void newLine(const QPolygonF& line, const QString& label);
+        void addLine(const QPolygonF& line, const QString& label);
+        void setLimits();
+        void resetZoom();
+
+        void paintEvent(QPaintEvent * e);
+        void resizeEvent(QResizeEvent * e);
+        void leaveEvent(QEvent * e);
+        void enterEvent(QEvent * e);
+        void mouseMoveEvent(QMouseEvent * e);
+        void mousePressEvent(QMouseEvent * e);
+
+
+        void setSizes();
+        void setLRTB();
+        void setSizeIconArea();
+        void setSizeXLabel();
+        void setSizeYLabel();
+        void setSizeTrackInfo();
+        void setSizeDrawArea();
+
+        void draw(QPainter& p);
+        void draw();
+        void drawData(QPainter& p);
+        void drawLabels( QPainter &p );
+        void drawXScale( QPainter &p );
+        void drawYScale( QPainter &p );
+        void drawGridX( QPainter &p );
+        void drawGridY( QPainter &p );
+        void drawXTic( QPainter &p );
+        void drawYTic( QPainter &p );
+        void drawLegend(QPainter& p);
+        void drawDecoration( QPainter &p );
+
+        // different draw modes
+        mode_e mode;
+        // buffer needs update
+        bool needsRedraw;
+
+        bool showScale;
+        bool thinLine;
+
+        QImage buffer;
+        QPoint posMouse;
+
+        /**
+           @brief The track this plot is attached to
+
+           @note It is save to store the pointer to the track item because
+                 the plot objects registers/unregisters with the track during
+                 construction and destruction.
+
+                 See CGisItem::registeredPlots for details.
+         */
+        CGisItemTrk * trk;
+        CPlotData * data;
+
+        QFontMetrics fm;
+
+        int left;
+        int right;
+        int top;
+        int bottom;
+
+        int deadAreaX;
+        int deadAreaY;
+
+        int fontWidth;
+        int fontHeight;
+        int scaleWidthX1;
+        int scaleWidthY1;
+
+        QRect rectX1Label;
+        QRect rectY1Label;
+        QRect rectGraphArea;
+        QRect rectIconArea;
+        QRect rectTrackInfo;
+
+        static QPen pens[];
+        static QPen pensThin[];
+        static QColor colors[];
+
+
+};
+
+#endif //IPLOT_H
+
diff --git a/src/resources.qrc b/src/resources.qrc
index 7af5816..80d9ec0 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -18,73 +18,6 @@
         <file>icons/8x8/bullet_red.png</file>
         <file>icons/8x8/bullet_white.png</file>
         <file>icons/8x8/bullet_yellow.png</file>
-        <file>icons/16x16/2DFix.png</file>
-        <file>icons/16x16/3DFix.png</file>
-        <file>icons/16x16/Add.png</file>
-        <file>icons/16x16/AddMapWorkspace.png</file>
-        <file>icons/16x16/Cancel.png</file>
-        <file>icons/16x16/Check.png</file>
-        <file>icons/16x16/DeleteMultiple.png</file>
-        <file>icons/16x16/DeleteOne.png</file>
-        <file>icons/16x16/Down.png</file>
-        <file>icons/16x16/FolderMap.png</file>
-        <file>icons/16x16/FolderDEM.png</file>
-        <file>icons/16x16/Font.png</file>
-        <file>icons/16x16/FromMap.png</file>
-        <file>icons/16x16/Grid.png</file>
-        <file>icons/16x16/GridSetup.png</file>
-        <file>icons/16x16/GridWizzard.png</file>
-        <file>icons/16x16/Help.png</file>
-        <file>icons/16x16/Info.png</file>
-        <file>icons/16x16/Map.png</file>
-        <file>icons/16x16/QMapShack.png</file>
-        <file>icons/16x16/MimeIMG.png</file>
-        <file>icons/16x16/MimeJNX.png</file>
-        <file>icons/16x16/MimeMAP.png</file>
-        <file>icons/16x16/MimeRMAP.png</file>
-        <file>icons/16x16/MimeVRT.png</file>
-        <file>icons/16x16/MimeDemVRT.png</file>
-        <file>icons/16x16/MouseWheel.png</file>
-        <file>icons/16x16/NightDay.png</file>
-        <file>icons/16x16/NoFix.png</file>
-        <file>icons/16x16/Off.png</file>
-        <file>icons/16x16/POIText.png</file>
-        <file>icons/16x16/Reset.png</file>
-        <file>icons/16x16/Right.png</file>
-        <file>icons/16x16/Scale.png</file>
-        <file>icons/16x16/SelectColor.png</file>
-        <file>icons/16x16/ToBottom.png</file>
-        <file>icons/16x16/ToTop.png</file>
-        <file>icons/16x16/ToolTip.png</file>
-        <file>icons/16x16/Up.png</file>
-        <file>icons/16x16/SetupMapWorkspace.png</file>
-        <file>icons/16x16/SaveGIS.png</file>
-        <file>icons/16x16/SaveAllGIS.png</file>
-        <file>icons/16x16/LoadGIS.png</file>
-        <file>icons/16x16/GisProject.png</file>
-        <file>icons/16x16/Route.png</file>
-        <file>icons/16x16/Close.png</file>
-        <file>icons/16x16/Track.png</file>
-        <file>icons/16x16/EditDetails.png</file>
-        <file>icons/16x16/EditText.png</file>
-        <file>icons/16x16/TimeZoneSetup.png</file>
-        <file>icons/16x16/Undo.png</file>
-        <file>icons/16x16/Redo.png</file>
-        <file>icons/16x16/Cut.png</file>
-        <file>icons/16x16/Copy.png</file>
-        <file>icons/16x16/Paste.png</file>
-        <file>icons/16x16/TextLeft.png</file>
-        <file>icons/16x16/TextRight.png</file>
-        <file>icons/16x16/TextCenter.png</file>
-        <file>icons/16x16/TextJustified.png</file>
-        <file>icons/16x16/TextBold.png</file>
-        <file>icons/16x16/TextUnderlined.png</file>
-        <file>icons/16x16/TextItalic.png</file>
-        <file>icons/16x16/Lock.png</file>
-        <file>icons/16x16/UnLock.png</file>
-        <file>icons/16x16/WptMove.png</file>
-        <file>icons/16x16/WptProj.png</file>
-        <file>icons/16x16/Tainted.png</file>
 
         <file>icons/32x32/2DFix.png</file>
         <file>icons/32x32/3DFix.png</file>
@@ -111,6 +44,7 @@
         <file>icons/32x32/MimeMAP.png</file>
         <file>icons/32x32/MimeRMAP.png</file>
         <file>icons/32x32/MimeVRT.png</file>
+        <file>icons/32x32/MimeWMTS.png</file>
         <file>icons/32x32/MimeDemVRT.png</file>
         <file>icons/32x32/MouseWheel.png</file>
         <file>icons/32x32/NightDay.png</file>
@@ -152,9 +86,17 @@
         <file>icons/32x32/UnLock.png</file>
         <file>icons/32x32/WptMove.png</file>
         <file>icons/32x32/WptProj.png</file>
+        <file>icons/32x32/TrkCut.png</file>
+        <file>icons/32x32/TrkProfile.png</file>
         <file>icons/32x32/Tainted.png</file>
-
-
+        <file>icons/32x32/AddWpt.png</file>
+        <file>icons/32x32/AddTrk.png</file>
+        <file>icons/32x32/AddArea.png</file>
+        <file>icons/32x32/LineMove.png</file>
+        <file>icons/32x32/PointMove.png</file>
+        <file>icons/32x32/AreaMove.png</file>
+        <file>icons/32x32/SelectRange.png</file>
+        <file>icons/32x32/Area.png</file>
 
         <file>icons/48x48/2DFix.png</file>
         <file>icons/48x48/3DFix.png</file>
@@ -181,6 +123,7 @@
         <file>icons/48x48/MimeMAP.png</file>
         <file>icons/48x48/MimeRMAP.png</file>
         <file>icons/48x48/MimeVRT.png</file>
+        <file>icons/48x48/MimeWMTS.png</file>
         <file>icons/48x48/MimeDemVRT.png</file>
         <file>icons/48x48/MouseWheel.png</file>
         <file>icons/48x48/NightDay.png</file>
@@ -222,7 +165,17 @@
         <file>icons/48x48/UnLock.png</file>
         <file>icons/48x48/WptMove.png</file>
         <file>icons/48x48/WptProj.png</file>
+        <file>icons/48x48/TrkCut.png</file>
+        <file>icons/48x48/TrkProfile.png</file>
         <file>icons/48x48/Tainted.png</file>
+        <file>icons/48x48/AddWpt.png</file>
+        <file>icons/48x48/AddTrk.png</file>
+        <file>icons/48x48/AddArea.png</file>
+        <file>icons/48x48/LineMove.png</file>
+        <file>icons/48x48/PointMove.png</file>
+        <file>icons/48x48/AreaMove.png</file>
+        <file>icons/48x48/SelectRange.png</file>
+        <file>icons/48x48/Area.png</file>
 
 
         <file>icons/cache/32x32/bluepin.png</file>
@@ -277,15 +230,23 @@
         <file>icons/waypoints/32x32/DiamondGreen.png</file>
         <file>icons/waypoints/32x32/DiamondBlue.png</file>
         <file>icons/waypoints/32x32/Residence.png</file>
+        <file>icons/waypoints/32x32/Waypoint.png</file>
         <file>cursors/cursorArrow.png</file>
         <file>cursors/cursorMove.png</file>
         <file>cursors/cursorMoveMap.png</file>
         <file>cursors/cursorMoveWpt.png</file>
+        <file>cursors/cursorMoveLine.png</file>
+        <file>cursors/cursorMoveArea.png</file>
+        <file>cursors/cursorSelectRange.png</file>
+        <file>cursors/cursorAdd.png</file>
         <file>cursors/wptHighlight.png</file>
         <file>animation/loader.gif</file>
         <file>animation/loader2.gif</file>
         <file>pics/timezones.png</file>
         <file>pics/splash.png</file>
         <file>pics/compass.png</file>
+        <file>pics/about.png</file>
+        <file>pics/noMap256x256.png</file>
+
     </qresource>
 </RCC>
diff --git a/src/units/CUnitMetric.cpp b/src/units/CUnitMetric.cpp
index e295374..906fdac 100644
--- a/src/units/CUnitMetric.cpp
+++ b/src/units/CUnitMetric.cpp
@@ -33,7 +33,7 @@ CUnitMetric::~CUnitMetric()
 
 void CUnitMetric::meter2elevation(qreal meter, QString& val, QString& unit)
 {
-    if(meter == NOFLOAT)
+    if(meter == NOFLOAT || meter == NOINT)
     {
         val  = "-";
         unit = "";
diff --git a/src/units/IUnit.cpp b/src/units/IUnit.cpp
index 2a233b5..b245d18 100644
--- a/src/units/IUnit.cpp
+++ b/src/units/IUnit.cpp
@@ -458,7 +458,7 @@ void IUnit::setUnitType(type_e t, QObject * parent)
 
 void IUnit::meter2speed(qreal meter, QString& val, QString& unit)
 {
-    val.sprintf("%1.2f",meter * speedfactor);
+    val.sprintf("%2.2f",meter * speedfactor);
     unit = speedunit;
 }
 
@@ -472,12 +472,14 @@ void IUnit::seconds2time(quint32 ttime, QString& val, QString& unit)
     if(days)
     {
         val = QString("%1:").arg(days) + time.toString("HH:mm:ss");
+        unit = "d";
     }
     else
     {
         val = time.toString("HH:mm:ss");
+        unit = "h";
     }
-    unit.clear();
+
 }
 
 bool IUnit::parseTimestamp(const QString &time, QDateTime &datetime)
@@ -557,7 +559,7 @@ QDateTime IUnit::parseTimestamp(const QString &timetext, int& tzoffset)
     return datetime;
 }
 
-QString IUnit::datetime2string(const QDateTime& time, const QPointF& pos)
+QString IUnit::datetime2string(const QDateTime& time, bool shortDate, const QPointF& pos)
 {
     QTimeZone tz;
 
@@ -580,7 +582,7 @@ QString IUnit::datetime2string(const QDateTime& time, const QPointF& pos)
     }
 
     QDateTime tmp = time.toTimeZone(tz);
-    return tmp.toString(Qt::SystemLocaleLongDate);
+    return tmp.toString(shortDate ? Qt::ISODate : Qt::SystemLocaleLongDate);
 }
 
 QByteArray IUnit::pos2timezone(const QPointF& pos)
diff --git a/src/units/IUnit.h b/src/units/IUnit.h
index c69e002..a1da356 100644
--- a/src/units/IUnit.h
+++ b/src/units/IUnit.h
@@ -50,7 +50,16 @@ class IUnit : public QObject
 
         static bool parseTimestamp(const QString &time, QDateTime &datetime);
 
-        static QString datetime2string(const QDateTime& time, const QPointF& pos = NOPOINTF);
+        /**
+           @brief Convert date time object to string using the current timezone configuration
+
+
+           @param time          the date/time object
+           @param shortDate     set true to get a short ISO time string
+           @param pos           optional a position attached to the date/time object [rad]
+           @return              A time string.
+         */
+        static QString datetime2string(const QDateTime& time, bool shortDate, const QPointF& pos = NOPOINTF);
 
         static QByteArray pos2timezone(const QPointF& pos);
 

-- 
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