[qmapshack] 02/11: Imported Upstream version 0.8.0

Bas Couwenberg sebastic at xs4all.nl
Sat Dec 13 14:11:34 UTC 2014


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

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

commit 7ccfff71f1a6e8d6f926a3617115acd0c116e9c5
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Sat Dec 13 01:32:08 2014 +0100

    Imported Upstream version 0.8.0
---
 .hg_archival.txt                                   |   4 +
 .hgtags                                            |  17 +
 CMakeLists.txt                                     |   6 +-
 CMakeLists.txt.user                                | 237 ------
 changelog.txt                                      |   7 +
 src/CMainWindow.cpp                                |  23 +-
 src/CMainWindow.h                                  |   1 +
 src/CMakeLists.txt                                 |  20 +-
 src/IMainWindow.ui                                 |  14 +-
 src/gis/CGisListWks.cpp                            |  49 +-
 src/gis/CGisListWks.h                              |   2 +
 src/gis/CGisSerialization.cpp                      | 215 -----
 src/gis/CGisWidget.cpp                             |  34 +-
 src/gis/CGisWidget.h                               |   2 +-
 src/gis/IGisItem.cpp                               | 167 ++--
 src/gis/IGisItem.h                                 | 321 ++-----
 src/gis/IGisLine.h                                 |   4 +-
 src/gis/IGisProject.cpp                            |  50 +-
 src/gis/IGisProject.h                              | 100 ++-
 src/gis/bin/CBinProject.cpp                        | 146 ++++
 src/gis/{IGisLine.h => bin/CBinProject.h}          |  22 +-
 src/gis/bin/serialization.cpp                      | 689 +++++++++++++++
 src/gis/gpx/CGpxProject.cpp                        | 257 +-----
 src/gis/gpx/CGpxProject.h                          |  64 +-
 src/gis/gpx/serialization.cpp                      | 931 +++++++++++++++++++++
 src/gis/ovl/CDetailsOvlArea.cpp                    |  31 +-
 src/gis/ovl/CDetailsOvlArea.h                      |   7 +-
 src/gis/ovl/CGisItemOvlArea.cpp                    | 105 +--
 src/gis/ovl/CGisItemOvlArea.h                      |   8 +-
 src/gis/ovl/IDetailsOvlArea.ui                     |   9 +-
 src/gis/rte/CGisItemRte.cpp                        |  82 +-
 src/gis/rte/CGisItemRte.h                          |   7 +-
 src/gis/search/CSearchGoogle.cpp                   |   2 +-
 src/gis/search/CSearchGoogle.h                     |   3 +
 src/gis/trk/CCombineTrk.cpp                        |   2 +-
 src/gis/trk/CDetailsTrk.cpp                        |  52 +-
 src/gis/trk/CDetailsTrk.h                          |   7 +-
 src/gis/trk/CGisItemTrk.cpp                        | 196 ++---
 src/gis/trk/CGisItemTrk.h                          | 101 ++-
 src/gis/trk/IDetailsTrk.ui                         | 694 +++++++--------
 src/gis/wpt/CDetailsWpt.cpp                        |  31 +-
 src/gis/wpt/CDetailsWpt.h                          |   6 +-
 src/gis/wpt/CGisItemWpt.cpp                        | 211 +----
 src/gis/wpt/CGisItemWpt.h                          |  25 +-
 src/gis/wpt/IDetailsWpt.ui                         | 230 +++--
 src/helpers/CElevationDialog.cpp                   |  87 ++
 .../CSearchGoogle.h => helpers/CElevationDialog.h} |  37 +-
 src/helpers/CHistoryListWidget.cpp                 | 120 +++
 .../CHistoryListWidget.h}                          |  40 +-
 src/helpers/CSelectProjectDialog.cpp               |  62 +-
 src/helpers/CSelectProjectDialog.h                 |  12 +-
 src/helpers/IElevationDialog.ui                    | 108 +++
 src/helpers/ISelectProjectDialog.ui                |  61 +-
 src/icons/32x32/AddProject.png                     | Bin 1234 -> 796 bytes
 src/icons/32x32/CutHistory.png                     | Bin 0 -> 1006 bytes
 src/icons/32x32/FolderDEM.png                      | Bin 838 -> 1293 bytes
 src/icons/32x32/FolderMap.png                      | Bin 1354 -> 1664 bytes
 src/icons/32x32/GpxProject.png                     | Bin 0 -> 1269 bytes
 src/icons/32x32/LoadGIS.png                        | Bin 1156 -> 982 bytes
 src/icons/32x32/Opacity.png                        | Bin 0 -> 779 bytes
 src/icons/32x32/Pattern.png                        | Bin 0 -> 1490 bytes
 src/icons/32x32/QmsProject.png                     | Bin 0 -> 1345 bytes
 src/icons/32x32/SaveAllGIS.png                     | Bin 1332 -> 777 bytes
 src/icons/32x32/SaveGIS.png                        | Bin 1130 -> 777 bytes
 src/icons/32x32/SaveGISAs.png                      | Bin 0 -> 1344 bytes
 src/icons/32x32/SetEle.png                         | Bin 0 -> 635 bytes
 src/icons/32x32/Start.png                          | Bin 0 -> 858 bytes
 src/icons/32x32/UnitSetup.png                      | Bin 0 -> 2459 bytes
 src/icons/32x32/WptProx.png                        | Bin 0 -> 917 bytes
 src/icons/48x48/AddProject.png                     | Bin 1713 -> 1021 bytes
 src/icons/48x48/CutHistory.png                     | Bin 0 -> 1568 bytes
 src/icons/48x48/FolderDEM.png                      | Bin 1120 -> 1743 bytes
 src/icons/48x48/FolderMap.png                      | Bin 2065 -> 2664 bytes
 src/icons/48x48/GpxProject.png                     | Bin 0 -> 1923 bytes
 src/icons/48x48/LoadGIS.png                        | Bin 1682 -> 1508 bytes
 src/icons/48x48/Opacity.png                        | Bin 0 -> 1168 bytes
 src/icons/48x48/Pattern.png                        | Bin 0 -> 2260 bytes
 src/icons/48x48/QmsProject.png                     | Bin 0 -> 2108 bytes
 src/icons/48x48/SaveAllGIS.png                     | Bin 2025 -> 989 bytes
 src/icons/48x48/SaveGIS.png                        | Bin 1671 -> 989 bytes
 src/icons/48x48/SaveGISAs.png                      | Bin 0 -> 2010 bytes
 src/icons/48x48/SetEle.png                         | Bin 0 -> 903 bytes
 src/icons/48x48/Start.png                          | Bin 0 -> 1264 bytes
 src/icons/48x48/UnitSetup.png                      | Bin 0 -> 4223 bytes
 src/icons/48x48/WptProx.png                        | Bin 0 -> 1341 bytes
 src/icons/AddProject.svg                           |  65 +-
 src/icons/CutHistory.svg                           | 139 +++
 src/icons/FolderDEM.svg                            |  65 +-
 src/icons/FolderMap.svg                            |  70 +-
 src/icons/GisProject.svg                           |  94 ---
 src/icons/GpxProject.svg                           | 115 +++
 src/icons/LoadGIS.svg                              | 122 ++-
 src/icons/Opacity.svg                              | 100 +++
 src/icons/Pattern.svg                              | 278 ++++++
 src/icons/QmsProject.svg                           | 115 +++
 src/icons/SaveAllGIS.svg                           | 175 ++--
 src/icons/SaveGIS.svg                              | 135 +--
 src/icons/SaveGISAs.svg                            | 152 ++++
 src/icons/SetEle.svg                               | 164 ++++
 src/icons/Start.svg                                | 111 +++
 src/icons/UnitSetup.svg                            | 106 +++
 src/icons/WptProx.svg                              | 151 ++++
 src/locale/qmapshack_cs.ts                         | 431 ++++++----
 src/locale/qmapshack_de.ts                         | 431 ++++++----
 src/locale/qmapshack_es.ts                         | 429 ++++++----
 src/mouse/CMouseEditArea.cpp                       |   2 +-
 src/mouse/IMouseEditLine.cpp                       |   9 +-
 src/resources.qrc                                  |  23 +-
 .../CUnitsSetup.cpp}                               |  67 +-
 .../CGisSerialization.h => units/CUnitsSetup.h}    |  19 +-
 src/units/IUnit.h                                  |   2 +-
 .../IUnitsSetup.ui}                                |  58 +-
 112 files changed, 6155 insertions(+), 3191 deletions(-)

diff --git a/.hg_archival.txt b/.hg_archival.txt
new file mode 100644
index 0000000..d4851dc
--- /dev/null
+++ b/.hg_archival.txt
@@ -0,0 +1,4 @@
+repo: 9d6ee306235c77d65d21797124dfc82760eb94e8
+node: c77136ce6df5377999c5c4fa3b8030a34e67e9a0
+branch: default
+tag: V 0.8.0
diff --git a/.hgtags b/.hgtags
new file mode 100644
index 0000000..4b77a16
--- /dev/null
+++ b/.hgtags
@@ -0,0 +1,17 @@
+fa1c3f1052c60c9dbb9257dafe64ddc260703401 V 0.1.0
+fa1c3f1052c60c9dbb9257dafe64ddc260703401 V 0.1.0
+0000000000000000000000000000000000000000 V 0.1.0
+0000000000000000000000000000000000000000 V 0.1.0
+b64cf4a6f83e022ff9f3561b1b2032328f778b24 V 0.1.0
+b64cf4a6f83e022ff9f3561b1b2032328f778b24 V 0.1.0
+0000000000000000000000000000000000000000 V 0.1.0
+0000000000000000000000000000000000000000 V 0.1.0
+ebf85b3b5f8522e87165d418b44a2e7c89df1442 V 0.1.0
+6e2abcfd92467de2b4db3bea7c1f18948c909486 V 0.2.0
+927dda1c9e5fc1d3c5468a06953e5fe4842b66d7 V 0.3.0
+49b3237aaa24ac3100f525643b93b184d34a22ae V 0.3.0.bureaucratic
+cbe5b6e6cab489636c3cce79c16a340fb249156f V 0.3.1
+96911e8840740c208cffde0c02eb8d1e81267ab2 V 0.4.0
+c0720884e8fdba0b812a76e8620f972f302e4162 V 0.5.0
+d7d2ddcbb62525558535f27ebffb1f9a54133441 V 0.6.0
+60688b74ffb725c9c4503e61557365f83300f678 V 0.7.0
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 60f874f..0556b08 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,7 +5,7 @@ project(QMapShack)
 # has to be removed later on
 
 if(UNIX)
-set(CMAKE_PREFIX_PATH /opt/Qt/5.3/gcc_64)
+set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} /opt/Qt/5.3/gcc_64)
 endif(UNIX)
 
 
@@ -13,14 +13,14 @@ if(WIN32)
 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})
+set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${QT_DEV_PATH})
 endif(WIN32)
 
 
 set(APPLICATION_NAME qmapshack)
 
 set(APPLICATION_VERSION_MAJOR "0")
-set(APPLICATION_VERSION_MINOR "7")
+set(APPLICATION_VERSION_MINOR "8")
 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
deleted file mode 100644
index 216fc60..0000000
--- a/CMakeLists.txt.user
+++ /dev/null
@@ -1,237 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 3.1.1, 2014-10-25T11:34:24. -->
-<qtcreator>
- <data>
-  <variable>ProjectExplorer.Project.ActiveTarget</variable>
-  <value type="int">0</value>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.EditorSettings</variable>
-  <valuemap type="QVariantMap">
-   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
-   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
-   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
-   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
-    <value type="QString" key="language">Cpp</value>
-    <valuemap type="QVariantMap" key="value">
-     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
-    </valuemap>
-   </valuemap>
-   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
-    <value type="QString" key="language">QmlJS</value>
-    <valuemap type="QVariantMap" key="value">
-     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
-    </valuemap>
-   </valuemap>
-   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
-   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
-   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
-   <value type="int" key="EditorConfiguration.IndentSize">4</value>
-   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
-   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
-   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
-   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
-   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
-   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
-   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
-   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
-   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
-   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
-   <value type="int" key="EditorConfiguration.TabSize">8</value>
-   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
-   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
-   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
-   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
-   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
-   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
-  </valuemap>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.PluginSettings</variable>
-  <valuemap type="QVariantMap"/>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.Target.0</variable>
-  <valuemap type="QVariantMap">
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.3.0 GCC 64bit</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.3.0 GCC 64bit</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.53.gcc_64_kit</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">1</value>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
-    <value type="bool" key="CMakeProjectManager.CMakeBuildConfiguration.UseNinja">false</value>
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/oeichler/Code/cpp/build_QMapShack</value>
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments">-j8</value>
-      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets"/>
-      <value type="bool" key="CMakeProjectManager.MakeStep.Clean">false</value>
-      <value type="bool" key="CMakeProjectManager.MakeStep.UseNinja">false</value>
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
-    </valuemap>
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments">clean</value>
-      <valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets"/>
-      <value type="bool" key="CMakeProjectManager.MakeStep.Clean">true</value>
-      <value type="bool" key="CMakeProjectManager.MakeStep.UseNinja">false</value>
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Bereinigen</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
-    </valuemap>
-    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
-    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
-    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">all</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
-   </valuemap>
-   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
-    </valuemap>
-    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Lokales Deployment</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
-   </valuemap>
-   <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
-    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
-    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
-    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
-    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
-    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
-    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
-    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
-    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
-    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
-    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
-     <value type="int">0</value>
-     <value type="int">1</value>
-     <value type="int">2</value>
-     <value type="int">3</value>
-     <value type="int">4</value>
-     <value type="int">5</value>
-     <value type="int">6</value>
-     <value type="int">7</value>
-     <value type="int">8</value>
-     <value type="int">9</value>
-     <value type="int">10</value>
-     <value type="int">11</value>
-     <value type="int">12</value>
-     <value type="int">13</value>
-     <value type="int">14</value>
-    </valuelist>
-    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">maproom</value>
-    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments"></value>
-    <value type="bool" key="CMakeProjectManager.CMakeRunConfiguration.UseTerminal">false</value>
-    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
-    <value type="int" key="PE.EnvironmentAspect.Base">-1</value>
-    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">maproom (deaktiviert)</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.maproom</value>
-    <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
-    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
-   </valuemap>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
-    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
-    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
-    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
-    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
-    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
-    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
-    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
-    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
-    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
-    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
-     <value type="int">0</value>
-     <value type="int">1</value>
-     <value type="int">2</value>
-     <value type="int">3</value>
-     <value type="int">4</value>
-     <value type="int">5</value>
-     <value type="int">6</value>
-     <value type="int">7</value>
-     <value type="int">8</value>
-     <value type="int">9</value>
-     <value type="int">10</value>
-     <value type="int">11</value>
-     <value type="int">12</value>
-     <value type="int">13</value>
-     <value type="int">14</value>
-    </valuelist>
-    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguation.Title">qmapshack</value>
-    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.Arguments">-d</value>
-    <value type="bool" key="CMakeProjectManager.CMakeRunConfiguration.UseTerminal">false</value>
-    <value type="QString" key="CMakeProjectManager.CMakeRunConfiguration.UserWorkingDirectory"></value>
-    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
-    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmapshack</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeRunConfiguration.qmapshack</value>
-    <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
-    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
-   </valuemap>
-   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
-  </valuemap>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.TargetCount</variable>
-  <value type="int">1</value>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
-  <value type="QByteArray">{044d553a-749a-4a4b-b707-1344605bd255}</value>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
-  <value type="int">15</value>
- </data>
-</qtcreator>
diff --git a/changelog.txt b/changelog.txt
index 08cb6fc..a6b74ef 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,10 @@
+V 0.8.0
+* Add unit setup (metric, imperial, nautical)
+* Add data serialization for track, waypoint, route and area
+* Add binary *.qms format to store projects without any loss of data
+* Enhance item history to perform full undo and redo
+* Many little fixes and enhancements
+
 V 0.7.0
 * Add Google GIS search
 * Add support for TMS maps
diff --git a/src/CMainWindow.cpp b/src/CMainWindow.cpp
index 5060f3f..c1f7121 100644
--- a/src/CMainWindow.cpp
+++ b/src/CMainWindow.cpp
@@ -26,6 +26,7 @@
 #include "dem/CDemDraw.h"
 #include "units/IUnit.h"
 #include "units/CTimeZoneSetup.h"
+#include "units/CUnitsSetup.h"
 #include "version.h"
 #include "CAbout.h"
 #include "gis/CGisWidget.h"
@@ -48,7 +49,7 @@ CMainWindow::CMainWindow()
     gisWidget = new CGisWidget(menuProject, this);
     dockGis->setWidget(gisWidget);
 
-    IUnit::self().setUnitType(IUnit::eTypeMetric, this);
+
 
     SETTINGS;
     // start ---- restore window geometry -----
@@ -67,6 +68,7 @@ CMainWindow::CMainWindow()
     }
     // end ---- restore window geometry -----
 
+    IUnit::self().setUnitType((IUnit::type_e)cfg.value("MainWindow/units",IUnit::eTypeMetric).toInt(), this);
 
     connect(actionAbout, SIGNAL(triggered()), this, SLOT(slotAbout()));
     connect(actionHelp, SIGNAL(triggered()), this, SLOT(slotHelp()));
@@ -82,6 +84,7 @@ CMainWindow::CMainWindow()
     connect(actionSetupDEMPaths, SIGNAL(triggered()), this, SLOT(slotSetupDemPath()));
     connect(actionSetupMapWks, SIGNAL(triggered()), this, SLOT(slotSetupMapWks()));
     connect(actionSetupTimeZone, SIGNAL(triggered()), this, SLOT(slotSetupTimeZone()));
+    connect(actionSetupUnits, SIGNAL(triggered()), this, SLOT(slotSetupUnits()));
     connect(actionSaveGISData, SIGNAL(triggered()), gisWidget, SLOT(slotSaveAll()));
     connect(actionLoadGISData, SIGNAL(triggered()), this, SLOT(slotLoadGISData()));
     connect(tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(slotTabCloseRequest(int)));
@@ -153,6 +156,8 @@ CMainWindow::~CMainWindow()
     SETTINGS;
     cfg.setValue("MainWindow/state", saveState());
     cfg.setValue("MainWindow/geometry", saveGeometry());
+    cfg.setValue("MainWindow/units", IUnit::self().type);
+
 
     cfg.beginGroup("Canvas");
     QList<CCanvas*> allCanvas;
@@ -524,12 +529,20 @@ void CMainWindow::slotSetupTimeZone()
     dlg.exec();
 }
 
+void CMainWindow::slotSetupUnits()
+{
+    CUnitsSetup dlg(this);
+    dlg.exec();
+}
+
 void CMainWindow::slotLoadGISData()
 {
     SETTINGS;
     QString path = cfg.value("Paths/lastGisPath", QDir::homePath()).toString();
+    QString filter = cfg.value("Paths/lastGisFilter", "GPS Exchange Format (*.gpx)").toString();
+
 
-    QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Load GIS Data..."), path, "*.gpx");
+    QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Load GIS Data..."), path, "GPS Exchange Format (*.gpx);; QMapShack Binary (*.qms)", &filter);
 
     if(filenames.isEmpty())
     {
@@ -540,16 +553,14 @@ void CMainWindow::slotLoadGISData()
 
     path = QFileInfo(filenames.first()).absolutePath();
     cfg.setValue("Paths/lastGisPath", path);
+    cfg.setValue("Paths/lastGisFilter", filter);
 }
 
 void CMainWindow::loadGISData(const QStringList& filenames)
 {
     foreach(const QString& filename, filenames)
     {
-        if(QFileInfo(filename).suffix().toLower() == "gpx")
-        {
-            gisWidget->loadGpx(filename);
-        }
+        gisWidget->loadGisProject(filename);
     }
 }
 
diff --git a/src/CMainWindow.h b/src/CMainWindow.h
index d742c73..d149ed4 100644
--- a/src/CMainWindow.h
+++ b/src/CMainWindow.h
@@ -78,6 +78,7 @@ class CMainWindow : public QMainWindow, private Ui::IMainWindow
         void slotSetupDemPath();
         void slotSetupMapWks();
         void slotSetupTimeZone();
+        void slotSetupUnits();
         void slotLoadGISData();
 
     private:
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index bd560ae..a93c229 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -24,6 +24,8 @@ set( SRCS
     helpers/CWptIconDialog.cpp
     helpers/CTextEditWidget.cpp
     helpers/CSelectProjectDialog.cpp
+    helpers/CHistoryListWidget.cpp
+    helpers/CElevationDialog.cpp
     canvas/CCanvas.cpp
     canvas/CCanvasSetup.cpp
     canvas/IDrawContext.cpp
@@ -65,6 +67,7 @@ set( SRCS
     units/CUnitMetric.cpp
     units/CUnitNautic.cpp
     units/CTimeZoneSetup.cpp
+    units/CUnitsSetup.cpp
     grid/CGrid.cpp
     grid/CGridSetup.cpp
     grid/CProjWizard.cpp
@@ -90,7 +93,11 @@ set( SRCS
     gis/CGisListDB.cpp
     gis/CGisListWks.cpp
     gis/IGisProject.cpp
-    gis/CGisSerialization.cpp
+    gis/gpx/CGpxProject.cpp
+    gis/gpx/serialization.cpp
+    gis/bin/CBinProject.cpp
+    gis/bin/serialization.cpp
+    gis/search/CSearchGoogle.cpp
     gis/wpt/CGisItemWpt.cpp
     gis/wpt/CScrOptWpt.cpp
     gis/wpt/CDetailsWpt.cpp
@@ -104,9 +111,7 @@ set( SRCS
     gis/rte/CScrOptRte.cpp
     gis/ovl/CGisItemOvlArea.cpp
     gis/ovl/CScrOptOvlArea.cpp
-    gis/ovl/CDetailsOvlArea.cpp
-    gis/gpx/CGpxProject.cpp
-    gis/search/CSearchGoogle.cpp
+    gis/ovl/CDetailsOvlArea.cpp    
     plot/IPlot.cpp
     plot/CPlotAxis.cpp
     plot/CPlotAxisTime.cpp    
@@ -132,6 +137,8 @@ set( HDRS
     helpers/CWptIconDialog.h
     helpers/CTextEditWidget.h
     helpers/CSelectProjectDialog.h
+    helpers/CHistoryListWidget.h
+    helpers/CElevationDialog.h
     canvas/CCanvas.h
     canvas/CCanvasSetup.h
     canvas/IDrawContext.h
@@ -174,6 +181,7 @@ set( HDRS
     units/CUnitMetric.h
     units/CUnitNautic.h
     units/CTimeZoneSetup.h
+    units/CUnitsSetup.h
     grid/CGrid.h
     grid/CGridSetup.h
     grid/CProjWizard.h
@@ -199,7 +207,7 @@ set( HDRS
     gis/CGisWidget.h
     gis/CGisListDB.h
     gis/CGisListWks.h
-    gis/CGisSerialization.h
+    gis/bin/CBinProject.cpp
     gis/wpt/CGisItemWpt.h
     gis/wpt/CScrOptWpt.h
     gis/wpt/CDetailsWpt.h
@@ -234,6 +242,7 @@ set( UIS
     helpers/IWptIconDialog.ui
     helpers/ITextEditWidget.ui
     helpers/ISelectProjectDialog.ui
+    helpers/IElevationDialog.ui
     canvas/ICanvasSetup.ui
     dem/IDemList.ui
     dem/IDemPathSetup.ui
@@ -259,6 +268,7 @@ set( UIS
     gis/ovl/IScrOptOvlArea.ui
     gis/ovl/IDetailsOvlArea.ui
     units/ITimeZoneSetup.ui
+    units/IUnitsSetup.ui
 )
 
 set( RCS
diff --git a/src/IMainWindow.ui b/src/IMainWindow.ui
index 5a44ac3..2106bb4 100644
--- a/src/IMainWindow.ui
+++ b/src/IMainWindow.ui
@@ -52,7 +52,7 @@
      <x>0</x>
      <y>0</y>
      <width>800</width>
-     <height>20</height>
+     <height>23</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuFile">
@@ -79,6 +79,7 @@
     <addaction name="separator"/>
     <addaction name="actionFlipMouseWheel"/>
     <addaction name="actionSetupMapFont"/>
+    <addaction name="actionSetupUnits"/>
     <addaction name="actionSetupGrid"/>
     <addaction name="actionSetupMapWks"/>
     <addaction name="actionSetupTimeZone"/>
@@ -411,12 +412,21 @@
   <action name="actionCloseAllProjects">
    <property name="icon">
     <iconset resource="resources.qrc">
-     <normaloff>:/icons/32x32/DeleteMultiple.png</normaloff>:/icons/32x32/DeleteMultiple.png</iconset>
+     <normaloff>:/icons/32x32/Close.png</normaloff>:/icons/32x32/Close.png</iconset>
    </property>
    <property name="text">
     <string>Close all projects</string>
    </property>
   </action>
+  <action name="actionSetupUnits">
+   <property name="icon">
+    <iconset resource="resources.qrc">
+     <normaloff>:/icons/32x32/UnitSetup.png</normaloff>:/icons/32x32/UnitSetup.png</iconset>
+   </property>
+   <property name="text">
+    <string>Setup Units</string>
+   </property>
+  </action>
  </widget>
  <resources>
   <include location="resources.qrc"/>
diff --git a/src/gis/CGisListWks.cpp b/src/gis/CGisListWks.cpp
index 4f08b19..c9fb4cc 100644
--- a/src/gis/CGisListWks.cpp
+++ b/src/gis/CGisListWks.cpp
@@ -21,11 +21,13 @@
 #include "gis/IGisItem.h"
 #include "gis/CGisWidget.h"
 #include "gis/gpx/CGpxProject.h"
+#include "gis/bin/CBinProject.h"
 #include "gis/wpt/CGisItemWpt.h"
 #include "gis/trk/CGisItemTrk.h"
 #include "gis/rte/CGisItemRte.h"
 #include "gis/ovl/CGisItemOvlArea.h"
 #include "gis/search/CSearchGoogle.h"
+#include "helpers/CSelectProjectDialog.h"
 #include "CMainWindow.h"
 
 #include <QtWidgets>
@@ -36,7 +38,7 @@ CGisListWks::CGisListWks(QWidget *parent)
 {
 
     menuProject     = new QMenu(this);
-    actionSaveAs    = menuProject->addAction(QIcon("://icons/32x32/SaveGIS.png"),tr("Save As..."), this, SLOT(slotSaveAsProject()));
+    actionSaveAs    = menuProject->addAction(QIcon("://icons/32x32/SaveGISAs.png"),tr("Save As..."), this, SLOT(slotSaveAsProject()));
     actionSave      = menuProject->addAction(QIcon("://icons/32x32/SaveGIS.png"),tr("Save"), this, SLOT(slotSaveProject()));    
     actionClose     = menuProject->addAction(QIcon("://icons/32x32/Close.png"),tr("Close"), this, SLOT(slotCloseProject()));
 
@@ -52,6 +54,7 @@ CGisListWks::CGisListWks(QWidget *parent)
     actionEditTrk   = menuItem->addAction(QIcon("://icons/32x32/LineMove.png"),tr("Edit Track Points"), this, SLOT(slotEditTrk()));
     actionReverseTrk = menuItem->addAction(QIcon("://icons/32x32/Reverse.png"),tr("Reverse Track"), this, SLOT(slotReverseTrk()));
     actionCombineTrk = menuItem->addAction(QIcon("://icons/32x32/Combine.png"),tr("Combine Tracks"), this, SLOT(slotCombineTrk()));
+    actionEditArea   = menuItem->addAction(QIcon("://icons/32x32/AreaMove.png"),tr("Edit Area Points"), this, SLOT(slotEditArea()));
     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()));    
@@ -323,7 +326,7 @@ void CGisListWks::slotContextMenu(const QPoint& point)
         return;
     }
 
-    CGpxProject * project = dynamic_cast<CGpxProject*>(currentItem());
+    IGisProject * project = dynamic_cast<IGisProject*>(currentItem());
     if(project != 0)
     {
         QPoint p = mapToGlobal(point);
@@ -369,6 +372,17 @@ void CGisListWks::slotContextMenu(const QPoint& point)
             actionFocusTrk->setChecked(trk->hasUserFocus());
             actionEditTrk->setEnabled(!trk->isReadOnly());            
         }
+
+        // try to cast item to track and hide/show actions on result
+        CGisItemOvlArea * area = dynamic_cast<CGisItemOvlArea*>(gisItem);
+        if(area == 0)
+        {
+            actionEditArea->setVisible(false);
+        }
+        else
+        {
+            actionEditArea->setVisible(true);
+        }
         // display menu
         QPoint p = mapToGlobal(point);
         menuItem->exec(p);
@@ -399,7 +413,7 @@ void CGisListWks::slotSaveProject()
     QList<QTreeWidgetItem*> items = selectedItems();
     foreach(QTreeWidgetItem * item, items)
     {
-        CGpxProject * project = dynamic_cast<CGpxProject*>(item);
+        IGisProject * project = dynamic_cast<IGisProject*>(item);
         if(project != 0)
         {
             project->save();
@@ -416,7 +430,7 @@ void CGisListWks::slotSaveAsProject()
     QList<QTreeWidgetItem*> items = selectedItems();
     foreach(QTreeWidgetItem * item, items)
     {
-        CGpxProject * project = dynamic_cast<CGpxProject*>(item);
+        IGisProject * project = dynamic_cast<IGisProject*>(item);
         if(project != 0)
         {
             project->saveAs();
@@ -550,15 +564,38 @@ void CGisListWks::slotRangeTrk()
     IGisItem::mutexItems.unlock();
 }
 
+void CGisListWks::slotEditArea()
+{
+    IGisItem::mutexItems.lock();
+    CGisItemOvlArea * gisItem = dynamic_cast<CGisItemOvlArea*>(currentItem());
+    if(gisItem != 0)
+    {
+        QString key = gisItem->getKey();
+        CGisWidget::self().editAreaByKey(key);
+    }
+    IGisItem::mutexItems.unlock();
+}
+
+
 void CGisListWks::slotAddEmptyProject()
 {
-    QString name = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, tr("New Project"));
+    QString key, name;
+    CSelectProjectDialog::type_e type;
+    CSelectProjectDialog dlg(key, name, type, 0);
+    dlg.exec();
     if(name.isEmpty())
     {
         return;
     }
 
-    new CGpxProject(name, this);
+    if(type == CSelectProjectDialog::eTypeGpx)
+    {
+        new CGpxProject(name, this);
+    }
+    else if(type == CSelectProjectDialog::eTypeQms)
+    {
+        new CBinProject(name, this);
+    }
 }
 
 void CGisListWks::slotCloseAllProjects()
diff --git a/src/gis/CGisListWks.h b/src/gis/CGisListWks.h
index 1b89604..c79d528 100644
--- a/src/gis/CGisListWks.h
+++ b/src/gis/CGisListWks.h
@@ -58,6 +58,7 @@ class CGisListWks : public QTreeWidget
         void slotReverseTrk();
         void slotCombineTrk();
         void slotRangeTrk();
+        void slotEditArea();
         void slotAddEmptyProject();
         void slotCloseAllProjects();
         void slotSearchGoogle(bool on);
@@ -79,6 +80,7 @@ class CGisListWks : public QTreeWidget
         QAction * actionReverseTrk;
         QAction * actionCombineTrk;
         QAction * actionRangeTrk;
+        QAction * actionEditArea;
 
         QMenu * menuNone;
 
diff --git a/src/gis/CGisSerialization.cpp b/src/gis/CGisSerialization.cpp
deleted file mode 100644
index 408ed65..0000000
--- a/src/gis/CGisSerialization.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-/**********************************************************************************************
-    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/CGisSerialization.h"
-#include "gis/trk/CGisItemTrk.h"
-
-#include <QtWidgets>
-
-#define VER_TRK     quint8(1)
-#define VER_WPT     quint8(1)
-#define VER_RTE     quint8(1)
-#define VER_AREA    quint8(1)
-#define VER_LINK    quint8(1)
-#define VER_TRKSEG  quint8(1)
-#define VER_TRKPT   quint8(1)
-#define VER_WPT_T   quint8(1)
-
-#define MAGIC_SIZE  10
-#define MAGIC_TRK   "QMTrk     "
-#define MAGIC_WPT   "QMWpt     "
-#define MAGIC_RTE   "QMRte     "
-#define MAGIC_AREA  "QMArea    "
-
-
-QDataStream& operator<<(QDataStream& stream, const IGisItem::link_t& link)
-{
-    stream << VER_LINK << link.uri << link.text << link.type;
-    return stream;
-}
-
-QDataStream& operator>>(QDataStream& stream, IGisItem::link_t& link)
-{
-    quint8 version;
-    stream >> version >> link.uri >> link.text >> link.type;
-    return stream;
-}
-
-QDataStream& operator<<(QDataStream& stream, const IGisItem::wpt_t& wpt)
-{
-    stream << VER_WPT_T;
-    stream << wpt.lat;
-    stream << wpt.lon;
-    stream << wpt.ele;
-    stream << wpt.time;
-    stream << wpt.magvar;
-    stream << wpt.geoidheight;
-    stream << wpt.name;
-    stream << wpt.cmt;
-    stream << wpt.desc;
-    stream << wpt.src;
-    stream << wpt.links;
-    stream << wpt.sym;
-    stream << wpt.type;
-    stream << wpt.fix;
-    stream << wpt.sat;
-    stream << wpt.hdop;
-    stream << wpt.vdop;
-    stream << wpt.pdop;
-    stream << wpt.ageofdgpsdata;
-    stream << wpt.dgpsid;
-    return stream;
-}
-
-QDataStream& operator>>(QDataStream& stream, IGisItem::wpt_t& wpt)
-{
-    quint8 version;
-    stream >> version;
-    stream >> wpt.lat;
-    stream >> wpt.lon;
-    stream >> wpt.ele;
-    stream >> wpt.time;
-    stream >> wpt.magvar;
-    stream >> wpt.geoidheight;
-    stream >> wpt.name;
-    stream >> wpt.cmt;
-    stream >> wpt.desc;
-    stream >> wpt.src;
-    stream >> wpt.links;
-    stream >> wpt.sym;
-    stream >> wpt.type;
-    stream >> wpt.fix;
-    stream >> wpt.sat;
-    stream >> wpt.hdop;
-    stream >> wpt.vdop;
-    stream >> wpt.pdop;
-    stream >> wpt.ageofdgpsdata;
-    stream >> wpt.dgpsid;
-
-    return stream;
-}
-
-
-QDataStream& operator<<(QDataStream& stream, const CGisItemTrk::trkseg_t& seg)
-{
-    stream << VER_TRKSEG << seg.pts;
-    return stream;
-}
-
-QDataStream& operator>>(QDataStream& stream, CGisItemTrk::trkseg_t& seg)
-{
-    quint8 version;
-    stream >> version >> seg.pts;
-    return stream;
-}
-
-QDataStream& operator<<(QDataStream& stream, const CGisItemTrk::trkpt_t& pt)
-{
-    stream << VER_TRKPT << pt.flags << pt.shdwLon << pt.shdwLat << pt.shdwEle << pt.shdwTime;
-    stream << (const IGisItem::wpt_t&)pt;
-    return stream;
-}
-
-QDataStream& operator>>(QDataStream& stream, CGisItemTrk::trkpt_t& pt)
-{
-    quint8 version;
-    stream >> version >> pt.flags >> pt.shdwLon >> pt.shdwLat >> pt.shdwEle >> pt.shdwTime;
-    stream >> (IGisItem::wpt_t&)pt;
-    return stream;
-}
-
-QDataStream& CGisItemTrk::operator>>(QDataStream& stream)
-{
-    QByteArray  buffer;
-    QDataStream out(&buffer, QIODevice::WriteOnly);
-    out.setByteOrder(QDataStream::LittleEndian);
-    out.setVersion(QDataStream::Qt_5_3);
-
-    out << key;
-    out << flags;
-    out << trk.name;
-    out << trk.cmt;
-    out << trk.desc;
-    out << trk.src;
-    out << trk.links;
-    out << trk.number;
-    out << trk.type;
-    out << trk.color;
-    out << trk.segs;
-
-    stream.writeRawData(MAGIC_TRK, MAGIC_SIZE);
-    stream << VER_TRK;
-    stream << qCompress(buffer,9);
-    return stream;
-}
-
-QDataStream& CGisItemTrk::operator<<(QDataStream& stream)
-{
-    quint8      version;
-    QByteArray  buffer;
-    QIODevice * dev = stream.device();
-    qint64      pos = dev->pos();
-
-    char magic[10];
-    stream.readRawData(magic,MAGIC_SIZE);
-
-    if(strncmp(magic,MAGIC_TRK,MAGIC_SIZE))
-    {
-        dev->seek(pos);
-        return stream;
-    }
-
-    stream >> version;
-    stream >> buffer;
-    buffer = qUncompress(buffer);
-
-    QDataStream in(&buffer, QIODevice::ReadOnly);
-    in.setByteOrder(QDataStream::LittleEndian);
-    in.setVersion(QDataStream::Qt_5_3);
-
-    in >> key;
-    in >> flags;
-    in >> trk.name;
-    in >> trk.cmt;
-    in >> trk.desc;
-    in >> trk.src;
-    in >> trk.links;
-    in >> trk.number;
-    in >> trk.type;
-    in >> trk.color;
-    setColor(trk.color);
-
-    trk.segs.clear();
-    in >> trk.segs;
-
-    deriveSecondaryData();
-
-    return stream;
-}
-
-
-CGisSerialization::CGisSerialization()
-{
-
-}
-
-CGisSerialization::~CGisSerialization()
-{
-
-}
-
diff --git a/src/gis/CGisWidget.cpp b/src/gis/CGisWidget.cpp
index dd5528e..e7e69f2 100644
--- a/src/gis/CGisWidget.cpp
+++ b/src/gis/CGisWidget.cpp
@@ -21,6 +21,7 @@
 #include "gis/IGisItem.h"
 #include "gis/CGisDraw.h"
 #include "gis/gpx/CGpxProject.h"
+#include "gis/bin/CBinProject.h"
 #include "gis/wpt/CGisItemWpt.h"
 #include "gis/wpt/CProjWpt.h"
 #include "gis/trk/CGisItemTrk.h"
@@ -54,7 +55,7 @@ CGisWidget::~CGisWidget()
     cfg.setValue("Workspace/treeWks/colum0/size", treeWks->header()->sectionSize(0));
 }
 
-void CGisWidget::loadGpx(const QString& filename)
+void CGisWidget::loadGisProject(const QString& filename)
 {
     // cerate file instance
     QFile file(filename);
@@ -75,8 +76,18 @@ void CGisWidget::loadGpx(const QString& filename)
     // add project to workspace
     QApplication::setOverrideCursor(Qt::WaitCursor);
     IGisItem::mutexItems.lock();
-    CGpxProject * item = new CGpxProject(filename, key, treeWks);
-    if(!item->isValid())
+    IGisProject * item = 0;
+    QString suffix = QFileInfo(filename).suffix().toLower();
+    if(suffix == "gpx")
+    {
+        item = new CGpxProject(filename, key, treeWks);
+    }
+    else if(suffix == "qms")
+    {
+        item = new CBinProject(filename, key, treeWks);
+    }
+
+    if(item && !item->isValid())
     {
         delete item;
     }
@@ -86,13 +97,14 @@ void CGisWidget::loadGpx(const QString& filename)
     emit sigChanged();
 }
 
+
 void CGisWidget::slotSaveAll()
 {
     QApplication::setOverrideCursor(Qt::WaitCursor);
     IGisItem::mutexItems.lock();
     for(int i = 0; i < treeWks->topLevelItemCount(); i++)
     {
-        CGpxProject * item = dynamic_cast<CGpxProject*>(treeWks->topLevelItem(i));
+        IGisProject * item = dynamic_cast<IGisProject*>(treeWks->topLevelItem(i));
         if(item == 0)
         {
             continue;
@@ -106,8 +118,9 @@ void CGisWidget::slotSaveAll()
 IGisProject * CGisWidget::selectProject()
 {
     QString key, name;
+    CSelectProjectDialog::type_e type;
 
-    CSelectProjectDialog dlg(key, name, treeWks);
+    CSelectProjectDialog dlg(key, name, type, treeWks);
     dlg.exec();
 
     IGisProject * project = 0;
@@ -131,7 +144,15 @@ IGisProject * CGisWidget::selectProject()
     else if(!name.isEmpty())
     {
         IGisItem::mutexItems.lock();
-        project = new CGpxProject(name, treeWks);
+        if(type == CSelectProjectDialog::eTypeGpx)
+        {
+            project = new CGpxProject(name, treeWks);
+        }
+        else if (type == CSelectProjectDialog::eTypeQms)
+        {
+            project = new CBinProject(name, treeWks);
+        }
+
         IGisItem::mutexItems.unlock();
     }
 
@@ -188,7 +209,6 @@ void CGisWidget::delItemByKey(const QString& key)
     }
 
     IGisItem::mutexItems.unlock();
-
     emit sigChanged();
 }
 
diff --git a/src/gis/CGisWidget.h b/src/gis/CGisWidget.h
index 3cfa842..5f3924e 100644
--- a/src/gis/CGisWidget.h
+++ b/src/gis/CGisWidget.h
@@ -33,7 +33,7 @@ class CGisWidget : public QWidget, private Ui::IGisWidget
         static CGisWidget& self(){return *pSelf;}
         virtual ~CGisWidget();
 
-        void loadGpx(const QString& filename);
+        void loadGisProject(const QString& filename);
         /**
            @brief Draw all loaded data in the workspace that is visible
 
diff --git a/src/gis/IGisItem.cpp b/src/gis/IGisItem.cpp
index ab01a2d..2a15a72 100644
--- a/src/gis/IGisItem.cpp
+++ b/src/gis/IGisItem.cpp
@@ -139,7 +139,7 @@ IGisItem::~IGisItem()
 
 }
 
-void IGisItem::changed(const QString &what)
+void IGisItem::changed(const QString &what, const QString &icon)
 {
     setText(1,"*");
     setToolTip(0,getInfo());
@@ -160,7 +160,101 @@ void IGisItem::changed(const QString &what)
         flags |= eFlagTainted;
     }
 
-    history << QString("%1: %2").arg(QDateTime::currentDateTimeUtc().toString()).arg(what);
+    // forget all history entries after the current entry
+    for(int i = history.events.size() - 1; i > history.histIdxCurrent; i--)
+    {
+        history.events.pop_back();
+    }
+
+    // append history by new entry
+    history.events << history_event_t();
+    history_event_t& event = history.events.last();
+    event.time      = QDateTime::currentDateTimeUtc();
+    event.comment   = what;
+    event.icon      = icon;
+
+    QDataStream stream(&event.data, QIODevice::WriteOnly);
+    stream.setByteOrder(QDataStream::LittleEndian);
+    stream.setVersion(QDataStream::Qt_5_2);
+
+    *this >> stream;
+
+    history.histIdxCurrent = history.events.size() - 1;
+}
+
+void IGisItem::setupHistory()
+{    
+    history.histIdxInitial = -1;
+    history.histIdxCurrent = -1;
+
+    // if history is empty setup an initial item
+    if(history.events.isEmpty())
+    {
+        history.events << history_event_t();
+        history_event_t& event = history.events.last();
+        event.time      = QDateTime::currentDateTimeUtc();
+        event.comment   = QObject::tr("Initial version.");
+        event.icon      = "://icons/48x48/Start.png";
+    }
+
+    // search for the first item with data
+    for(int i = 0; i < history.events.size(); i++)
+    {
+        if(!history.events[i].data.isEmpty())
+        {
+            history.histIdxInitial = i;
+            break;
+        }
+    }
+
+    // if no initial item can be found fill the last item with data
+    // and make it the initial item
+    if(history.histIdxInitial == -1)
+    {
+        history_event_t& event = history.events.last();
+
+        QDataStream stream(&event.data, QIODevice::WriteOnly);
+        stream.setByteOrder(QDataStream::LittleEndian);
+        stream.setVersion(QDataStream::Qt_5_2);
+        *this >> stream;
+
+        history.histIdxInitial = history.events.size() - 1;
+    }
+
+    history.histIdxCurrent = history.events.size() - 1;
+}
+
+void IGisItem::loadHistory(int idx)
+{
+    // test for bad index
+    if((idx >= history.events.size()) || (idx < 0))
+    {
+        return;
+    }
+
+    history_event_t& event = history.events[idx];
+
+    // test for no data
+    if(event.data.isEmpty())
+    {
+        return;
+    }
+
+    // restore item from history entry
+    QDataStream stream(&event.data, QIODevice::ReadOnly);
+    stream.setByteOrder(QDataStream::LittleEndian);
+    stream.setVersion(QDataStream::Qt_5_2);
+    *this << stream;
+
+    history.histIdxCurrent = idx;
+}
+
+void IGisItem::cutHistory()
+{
+    while(history.events.size() > (history.histIdxCurrent + 1))
+    {
+        history.events.pop_back();
+    }
 }
 
 bool IGisItem::isReadOnly()
@@ -197,75 +291,6 @@ void IGisItem::setReadOnlyMode(bool readOnly)
     }
 }
 
-void IGisItem::readWpt(const QDomNode& xml, wpt_t& wpt)
-{
-    const QDomNamedNodeMap& attr = xml.attributes();    
-    wpt.lat = attr.namedItem("lat").nodeValue().toDouble();
-    wpt.lon = attr.namedItem("lon").nodeValue().toDouble();
-
-    readXml(xml, "ele", wpt.ele);
-    readXml(xml, "time", wpt.time);
-    readXml(xml, "magvar", wpt.magvar);
-    readXml(xml, "geoidheight", wpt.geoidheight);
-    readXml(xml, "name", wpt.name);
-    readXml(xml, "cmt", wpt.cmt);
-    readXml(xml, "desc", wpt.desc);
-    readXml(xml, "src", wpt.src);
-    readXml(xml, "link", wpt.links);
-    readXml(xml, "sym", wpt.sym);
-    readXml(xml, "type", wpt.type);
-    readXml(xml, "fix", wpt.fix);
-    readXml(xml, "sat", wpt.sat);
-    readXml(xml, "hdop", wpt.hdop);
-    readXml(xml, "vdop", wpt.vdop);
-    readXml(xml, "pdop", wpt.pdop);
-    readXml(xml, "ageofdgpsdata", wpt.ageofdgpsdata);
-    readXml(xml, "dgpsid", wpt.dgpsid);
-
-    // some GPX 1.0 backward compatibility
-    QString url;
-    readXml(xml, "url", url);
-    if(!url.isEmpty())
-    {
-        link_t link;
-        link.uri.setUrl(url);
-        readXml(xml, "urlname", link.text);
-
-        wpt.links << link;
-    }
-
-}
-
-
-void IGisItem::writeWpt(QDomElement& xml, const wpt_t& wpt)
-{
-    QString str;
-
-    str.sprintf("%1.8f", wpt.lat);
-    xml.setAttribute("lat",str);
-    str.sprintf("%1.8f", wpt.lon);
-    xml.setAttribute("lon",str);
-
-    writeXml(xml, "ele", wpt.ele);
-    writeXml(xml, "time", wpt.time);
-    writeXml(xml, "magvar", wpt.magvar);
-    writeXml(xml, "geoidheight", wpt.geoidheight);
-    writeXml(xml, "name", wpt.name);
-    writeXml(xml, "cmt", wpt.cmt);
-    writeXml(xml, "desc", wpt.desc);
-    writeXml(xml, "src", wpt.src);
-    writeXml(xml, "link", wpt.links);
-    writeXml(xml, "sym", wpt.sym);
-    writeXml(xml, "type", wpt.type);
-    writeXml(xml, "fix", wpt.fix);
-    writeXml(xml, "sat", wpt.sat);
-    writeXml(xml, "hdop", wpt.hdop);
-    writeXml(xml, "vdop", wpt.vdop);
-    writeXml(xml, "pdop", wpt.pdop);
-    writeXml(xml, "ageofdgpsdata", wpt.ageofdgpsdata);
-    writeXml(xml, "dgpsid", wpt.dgpsid);
-
-}
 
 const QString& IGisItem::getKey()
 {
diff --git a/src/gis/IGisItem.h b/src/gis/IGisItem.h
index b9dde39..ffe6951 100644
--- a/src/gis/IGisItem.h
+++ b/src/gis/IGisItem.h
@@ -41,8 +41,21 @@ class IGisItem : public QTreeWidgetItem
 {
 
     public:
-        typedef QStringList history_t;
-        history_t history;
+        struct history_event_t
+        {
+            QDateTime time;
+            QString   icon;
+            QString   comment;
+            QByteArray data;
+        };
+
+        struct history_t
+        {
+            qint32 histIdxInitial;
+            qint32 histIdxCurrent;
+            QList<history_event_t> events;
+        };
+
 
         struct link_t
         {
@@ -133,8 +146,6 @@ class IGisItem : public QTreeWidgetItem
         */
         virtual QString getInfo() = 0;
 
-        virtual const history_t& getHistory(){return history;}
-
         /**
             @brief Edit content of item.
 
@@ -203,11 +214,44 @@ class IGisItem : public QTreeWidgetItem
 
         virtual void gainUserFocus(bool yes) = 0;
 
+        /**
+           @brief Serialize object out of a QDataStream
+
+           See CGisSerialization.cpp for implementation
+
+           @param stream the binary data stream
+           @return The stream object.
+        */
+        virtual QDataStream& operator<<(QDataStream& stream) = 0;
+        /**
+           @brief Serialize object into a QDataStream
+
+           See CGisSerialization.cpp for implementation
+
+           @param stream the binary data stream
+           @return The stream object.
+        */
+        virtual QDataStream& operator>>(QDataStream& stream) = 0;
+
+        /**
+           @brief Get read access to history of changes
+
+           @return A reference to the history structure.
+        */
+        const history_t& getHistory() const {return history;}
+
+        /**
+           @brief Load a given state of chnage from the history
+           @param idx
+        */
+        void loadHistory(int idx);
+
+        void cutHistory();
+
         static QString removeHtml(const QString &str);
 
     protected:
         struct color_t;
-        friend class CGpxProject;
 
         /// read waypoint data from an XML snippet
         void readWpt(const QDomNode& xml, wpt_t &wpt);
@@ -215,6 +259,8 @@ class IGisItem : public QTreeWidgetItem
         void writeWpt(QDomElement &xml, const wpt_t &wpt);
         /// gnerate a unique key from item's data
         virtual void genKey() = 0;
+        /// setup the history structure right after the creation of the item
+        void setupHistory();
         /// convert a color string from GPX to a QT color
         QColor str2color(const QString& name);
         /// convertr a QT color to a string to be used in a GPX file
@@ -224,12 +270,16 @@ class IGisItem : public QTreeWidgetItem
         /// ditribute arrows over a polyline
         void drawArrows(const QPolygonF &line, const QRectF &extViewport, QPainter& p);
         /// call when ever you make a change to the item's data
-        void changed(const QString& what);
+        virtual void changed(const QString& what, const QString& icon);
 
         quint32 flags;
         QString key;
         QPixmap icon;
         QRectF boundingRect;
+
+        history_t history;
+
+
         static const color_t colorMap[];
 
 
@@ -249,265 +299,6 @@ class IGisItem : public QTreeWidgetItem
 
 
 
-        static inline void readXml(const QDomNode& xml, const QString& tag, bool& value)
-        {
-            if(xml.namedItem(tag).isElement())
-            {
-                bool tmp;
-                bool ok = false;
-                tmp = xml.namedItem(tag).toElement().text().toInt(&ok);
-                if(ok)
-                {
-                    value = tmp;
-                }
-            }
-        }
-
-        static inline void readXml(const QDomNode& xml, const QString& tag, qint32& value)
-        {
-            if(xml.namedItem(tag).isElement())
-            {
-                qint32 tmp;
-                bool ok = false;
-                tmp = xml.namedItem(tag).toElement().text().toInt(&ok);
-                if(!ok)
-                {
-                    tmp = qRound(xml.namedItem(tag).toElement().text().toDouble(&ok));
-                }
-                if(ok)
-                {
-                    value = tmp;
-                }
-            }
-        }
-
-        static inline void readXml(const QDomNode& xml, const QString& tag, quint32& value)
-        {
-            if(xml.namedItem(tag).isElement())
-            {
-                quint32 tmp;
-                bool ok = false;
-                tmp = xml.namedItem(tag).toElement().text().toUInt(&ok);
-                if(ok)
-                {
-                    value = tmp;
-                }
-            }
-        }
-
-        static inline void readXml(const QDomNode& xml, const QString& tag, quint64& value)
-        {
-            if(xml.namedItem(tag).isElement())
-            {
-                quint64 tmp;
-                bool ok = false;
-                tmp = xml.namedItem(tag).toElement().text().toULongLong(&ok);
-                if(ok)
-                {
-                    value = tmp;
-                }
-            }
-        }
-
-        static inline void readXml(const QDomNode& xml, const QString& tag, qreal& value)
-        {
-            if(xml.namedItem(tag).isElement())
-            {
-                qreal tmp;
-                bool ok = false;
-                tmp = xml.namedItem(tag).toElement().text().toDouble(&ok);
-                if(ok)
-                {
-                    value = tmp;
-                }
-            }
-        }
-
-        static inline void readXml(const QDomNode& xml, const QString& tag, QString& value)
-        {
-            if(xml.namedItem(tag).isElement())
-            {
-                value = xml.namedItem(tag).toElement().text();
-            }
-        }
-
-        static inline void readXml(const QDomNode& xml, const QString& tag, QString& value, bool& isHtml)
-        {
-            if(xml.namedItem(tag).isElement())
-            {
-                const QDomNamedNodeMap& attr = xml.namedItem(tag).toElement().attributes();
-
-                if(attr.namedItem("html").nodeValue().toLocal8Bit().toLower() == "true")
-                {
-                    isHtml = true;
-                    value = xml.namedItem(tag).toElement().text();
-                }
-                else
-                {
-                    isHtml = false;
-                    value = "<pre>" + xml.namedItem(tag).toElement().text() + "</pre>";
-                    value = xml.namedItem(tag).toElement().text();
-                }
-
-            }
-        }
-
-        static inline void readXml(const QDomNode& xml, const QString& tag, QDateTime& value)
-        {
-            if(xml.namedItem(tag).isElement())
-            {
-                QString time = xml.namedItem(tag).toElement().text();
-                IUnit::parseTimestamp(time, value);
-
-            }
-        }
-
-        static inline void readXml(const QDomNode& xml, const QString& tag, QList<link_t>& l)
-        {
-            if(xml.namedItem(tag).isElement())
-            {
-                const QDomNodeList& links = xml.toElement().elementsByTagName(tag);
-                int N = links.count();
-                for(int n = 0; n < N; ++n)
-                {
-                    const QDomNode& link = links.item(n);
-
-                    link_t tmp;
-                    tmp.uri.setUrl(link.attributes().namedItem("href").nodeValue());
-                    readXml(link, "text", tmp.text);
-                    readXml(link, "type", tmp.type);
-
-                    l << tmp;
-                }
-            }
-        }
-
-        static inline void readXml(const QDomNode& xml, history_t& history)
-        {
-            if(xml.namedItem("ql:history").isElement())
-            {
-                const QDomElement& xmlHistory = xml.namedItem("ql:history").toElement();
-
-                const QDomNodeList& entries = xmlHistory.elementsByTagName("ql:event");
-                int N = entries.count();
-                for(int n = 0; n < N; ++n)
-                {
-                    const QDomNode& entry = entries.item(n);
-                    history << entry.toElement().text();
-                }
-            }
-        }
-
-
-        static inline void writeXml(QDomNode& xml, const QString& tag, qint32 val)
-        {
-            if(val != NOINT)
-            {
-                QDomElement elem = xml.ownerDocument().createElement(tag);
-                xml.appendChild(elem);
-                QDomText text = xml.ownerDocument().createTextNode(QString::number(val));
-                elem.appendChild(text);
-            }
-        }
-
-        static inline void writeXml(QDomNode& xml, const QString& tag, quint32 val)
-        {
-            if(val != NOINT)
-            {
-                QDomElement elem = xml.ownerDocument().createElement(tag);
-                xml.appendChild(elem);
-                QDomText text = xml.ownerDocument().createTextNode(QString::number(val));
-                elem.appendChild(text);
-            }
-        }
-
-        static inline void writeXml(QDomNode& xml, const QString& tag, quint64 val)
-        {
-            if(val != 0)
-            {
-                QDomElement elem = xml.ownerDocument().createElement(tag);
-                xml.appendChild(elem);
-                QDomText text = xml.ownerDocument().createTextNode(QString::number(val));
-                elem.appendChild(text);
-            }
-        }
-
-        static inline void writeXml(QDomNode& xml, const QString& tag, const QString& val)
-        {
-            if(!val.isEmpty())
-            {
-                QDomElement elem = xml.ownerDocument().createElement(tag);
-                xml.appendChild(elem);
-                QDomText text = xml.ownerDocument().createTextNode(val);
-                elem.appendChild(text);
-            }
-        }
-
-        static inline void writeXml(QDomNode& xml, const QString& tag, qreal val)
-        {
-            if(val != NOFLOAT)
-            {
-                QDomElement elem = xml.ownerDocument().createElement(tag);
-                xml.appendChild(elem);
-                QDomText text = xml.ownerDocument().createTextNode(QString("%1").arg(val,0,'f',8));
-                elem.appendChild(text);
-            }
-        }
-
-        static inline void writeXml(QDomNode& xml, const QString& tag, const QString& val, bool isHtml)
-        {
-            if(!val.isEmpty())
-            {
-                QDomElement elem = xml.ownerDocument().createElement(tag);
-                xml.appendChild(elem);
-                QDomText text = xml.ownerDocument().createCDATASection(val);
-                elem.appendChild(text);
-                elem.setAttribute("html",isHtml ? "True" : "False");
-
-            }
-        }
-
-        static inline void writeXml(QDomNode& xml, const QString& tag, const QDateTime& time)
-        {
-            if(time.isValid())
-            {
-                QDomElement elem = xml.ownerDocument().createElement(tag);
-                xml.appendChild(elem);
-                QDomText text = xml.ownerDocument().createTextNode(time.toString("yyyy-MM-dd'T'hh:mm:ss'Z'"));
-                elem.appendChild(text);
-            }
-        }
-
-
-        static inline void writeXml(QDomNode& xml, const QString& tag, const QList<link_t>& links)
-        {
-            if(!links.isEmpty())
-            {
-                foreach(const link_t& link, links)
-                {
-                    QDomElement elem = xml.ownerDocument().createElement(tag);
-                    xml.appendChild(elem);
-
-                    elem.setAttribute("href", link.uri.toString());
-                    writeXml(elem, "text", link.text);
-                    writeXml(elem, "type", link.type);
-                }
-            }
-        }
-
-        static inline void writeXml(QDomNode& xml, const history_t& history)
-        {
-            if(!history.isEmpty())
-            {
-                QDomElement xmlHistory = xml.ownerDocument().createElement("ql:history");
-                xml.appendChild(xmlHistory);
-                foreach(const QString& entry, history)
-                {
-                    writeXml(xmlHistory, "ql:event", entry);
-                }
-            }
-        }
-
         static inline bool isBlocked(const QRectF& rect, const QList<QRectF> &blockedAreas)
         {
             foreach(const QRectF& r, blockedAreas)
diff --git a/src/gis/IGisLine.h b/src/gis/IGisLine.h
index 07dc2a6..040ec62 100644
--- a/src/gis/IGisLine.h
+++ b/src/gis/IGisLine.h
@@ -27,8 +27,8 @@ class IGisLine
         IGisLine();
         virtual ~IGisLine();
 
-        virtual void setData(const QPolygonF& line) = 0;
-        virtual void getData(QPolygonF& line) = 0;
+        virtual void setDataFromPolyline(const QPolygonF& line) = 0;
+        virtual void getPolylineFromData(QPolygonF& line) = 0;
 };
 
 #endif //IGISLINE_H
diff --git a/src/gis/IGisProject.cpp b/src/gis/IGisProject.cpp
index a24991a..bc197ba 100644
--- a/src/gis/IGisProject.cpp
+++ b/src/gis/IGisProject.cpp
@@ -23,9 +23,12 @@
 
 #include <QtWidgets>
 
-IGisProject::IGisProject(const QString& key, CGisListWks *parent)
+
+IGisProject::IGisProject(const QString& key, const QString &filename, CGisListWks *parent)
     : QTreeWidgetItem(parent)
     , key(key)
+    , filename(filename)
+    , valid(false)
 {
     if(key.isEmpty())
     {
@@ -40,6 +43,50 @@ IGisProject::~IGisProject()
 
 }
 
+void IGisProject::markAsSaved()
+{
+    setText(1,"");
+    for(int i = 0; i < childCount(); i++)
+    {
+
+        IGisItem * item = dynamic_cast<IGisItem*>(child(i));
+        if(item == 0)
+        {
+            continue;
+        }
+        item->setText(1,"");
+    }
+}
+
+QString IGisProject::getInfo()
+{
+    QString str = metadata.name.isEmpty() ? text(0) : metadata.name;
+
+    if(metadata.time.isValid())
+    {
+        str += "\n";
+        str += IUnit::datetime2string(metadata.time, false);
+    }
+
+
+    if(!metadata.desc.isEmpty())
+    {
+        str += "\n";
+
+        if(metadata.desc.count() < 200)
+        {
+            str += metadata.desc;
+        }
+        else
+        {
+            str += metadata.desc.left(197) + "...";
+        }
+    }
+
+
+    return str;
+}
+
 IGisItem * IGisProject::getItemByKey(const QString& key)
 {
     for(int i = 0; i < childCount(); i++)
@@ -191,3 +238,4 @@ void IGisProject::drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>&
     }
 
 }
+
diff --git a/src/gis/IGisProject.h b/src/gis/IGisProject.h
index 9abc966..cc82cd2 100644
--- a/src/gis/IGisProject.h
+++ b/src/gis/IGisProject.h
@@ -19,18 +19,29 @@
 #ifndef IGISPROJECT_H
 #define IGISPROJECT_H
 
+#include "gis/IGisItem.h"
 #include <QTreeWidgetItem>
 
+
 class CGisListWks;
 class IGisItem;
 class CGisDraw;
+class QDataStream;
 
 class IGisProject : public QTreeWidgetItem
 {
     public:
-        IGisProject(const QString &key, CGisListWks * parent);
+        IGisProject(const QString &key, const QString& filename, CGisListWks * parent);
         virtual ~IGisProject();
 
+        virtual void save() = 0;
+        virtual void saveAs() = 0;
+
+        virtual void setFilename(const QString& fn){filename = fn;}
+        virtual QString getFilename(){return filename;}
+
+        virtual QString getInfo();
+
         /**
            @brief Get unique project key.
            @return A MD5 hash string
@@ -68,13 +79,98 @@ class IGisProject : public QTreeWidgetItem
          */
         void editItemByKey(const QString& key);
 
+        /**
+           @brief Check if the project was initialized correctly.
+
+           For example a if a GPX file does not load correctly the project is invalid.
+
+           @return True if project is valid
+         */
+        bool  isValid(){return valid;}
+
+
 
         void drawItem(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, CGisDraw * gis);
         void drawLabel(QPainter& p, const QRectF& viewport, QList<QRectF>& blockedAreas, QSet<QString> &seenKeys, const QFontMetricsF& fm, CGisDraw * gis);
         void drawItem(QPainter& p, const QRectF& viewport, CGisDraw * gis);
 
-    private:
+        /**
+           @brief Serialize object out of a QDataStream
+
+           See CGisSerialization.cpp for implementation
+
+           @param stream the binary data stream
+           @return The stream object.
+        */
+        virtual QDataStream& operator<<(QDataStream& stream);
+        /**
+           @brief Serialize object into a QDataStream
+
+           See CGisSerialization.cpp for implementation
+
+           @param stream the binary data stream
+           @return The stream object.
+        */
+        virtual QDataStream& operator>>(QDataStream& stream);
+
+        struct person_t
+        {
+            QString name;
+            QString id;
+            QString domain;
+            IGisItem::link_t link;
+        };
+
+        struct copyright_t
+        {
+            QString author;
+            QString year;
+            QString license;
+        };
+
+        struct metadata_t
+        {
+            QString name;
+            QString desc;
+            person_t author;
+            copyright_t copyright;
+            QList<IGisItem::link_t> links;
+            QDateTime time;
+            QString keywords;
+            QRectF bounds;
+            // -- all gpx tags - stop
+            QMap<QString, QVariant> extensions;
+
+        };
+
+        QDomNode writeMetadata(QDomDocument& doc);
+    protected:
+        void markAsSaved();
+        void readMetadata(const QDomNode& xml, metadata_t& metadata);
+
+        // Those are the URIs of the GPX extensions we support
+        static const QString gpxx_ns;
+        static const QString gpxtpx_ns;
+        static const QString wptx1_ns;
+        static const QString rmc_ns;
+        static const QString ql_ns;
+        static const QString gs_ns;
+        // Those are standard GPX/XML namespaces
+        static const QString gpx_ns;
+        static const QString xsi_ns;
+
+
+
         QString key;
+        QString filename;
+        bool valid;
+
+
+        metadata_t metadata;
+
+
+
+
 };
 
 #endif //IGISPROJECT_H
diff --git a/src/gis/bin/CBinProject.cpp b/src/gis/bin/CBinProject.cpp
new file mode 100644
index 0000000..0394b93
--- /dev/null
+++ b/src/gis/bin/CBinProject.cpp
@@ -0,0 +1,146 @@
+/**********************************************************************************************
+    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/bin/CBinProject.h"
+#include "gis/gpx/CGpxProject.h"
+#include "helpers/CSettings.h"
+
+
+#include <QtWidgets>
+CBinProject::CBinProject(const QString &name,  CGisListWks * parent)
+    : IGisProject("", "", parent)
+{
+    setText(0, name);
+    setIcon(0,QIcon("://icons/32x32/QmsProject.png"));
+    setToolTip(0, getInfo());
+    valid = true;
+}
+
+
+CBinProject::CBinProject(const QString &filename, const QString &key, CGisListWks *parent)
+    : IGisProject(key, filename, parent)
+{
+    setText(0, QFileInfo(filename).baseName());
+    setIcon(0,QIcon("://icons/32x32/QmsProject.png"));
+
+    QFile file(filename);
+    if(!file.open(QIODevice::ReadOnly))
+    {
+        QMessageBox::critical(0, QObject::tr("Failed to open..."), QObject::tr("Failed to open %1").arg(filename), QMessageBox::Abort);
+        return;
+    }
+
+    QDataStream in(&file);
+    in.setByteOrder(QDataStream::LittleEndian);
+    in.setVersion(QDataStream::Qt_5_2);
+
+    *this << in;    
+
+    file.close();
+
+    setToolTip(0, getInfo());
+    valid = true;
+}
+
+CBinProject::~CBinProject()
+{
+
+}
+
+
+void CBinProject::save()
+{
+
+    if(filename.isEmpty())
+    {
+        saveAs();
+    }
+    else
+    {
+        saveAs(filename, *this);
+        markAsSaved();
+    }
+}
+
+void CBinProject::saveAs()
+{
+    SETTINGS;
+    QString path = cfg.value("Paths/lastGisPath", QDir::homePath()).toString();
+
+    QString filter = "*.qms";
+    QString fn = QFileDialog::getSaveFileName(0, QObject::tr("Save GIS data to..."), path, "*.gpx;; *.qms", &filter);
+
+    if(fn.isEmpty())
+    {
+        return;
+    }
+
+
+    if(filter == "*.gpx")
+    {
+        CGpxProject::saveAs(fn, *this);
+    }
+    else if(filter == "*.qms")
+    {
+        saveAs(fn, *this);
+
+        filename = fn;
+        setText(0, QFileInfo(filename).baseName());
+        markAsSaved();
+    }
+    else
+    {
+        return;
+    }
+
+    path = QFileInfo(fn).absolutePath();
+    cfg.setValue("Paths/lastGisPath", path);
+
+}
+
+void CBinProject::saveAs(const QString& fn, IGisProject& project)
+{
+    QString _fn_ = fn;
+    QFileInfo fi(_fn_);
+    if(fi.suffix() != "qms")
+    {
+        _fn_ += ".qms";
+    }
+
+    // todo save qms
+    QFile file(_fn_);
+
+    if(!file.open(QIODevice::WriteOnly))
+    {
+        QMessageBox::critical(0, QObject::tr("Failed to open..."), QObject::tr("Failed to open %1").arg(_fn_), QMessageBox::Abort);
+        return;
+    }
+    QDataStream out(&file);
+    out.setByteOrder(QDataStream::LittleEndian);
+    out.setVersion(QDataStream::Qt_5_2);
+
+    QString tmp = project.getFilename();
+    project.setFilename(_fn_);
+
+    project >> out;
+
+    project.setFilename(tmp);
+
+    file.close();
+}
+
diff --git a/src/gis/IGisLine.h b/src/gis/bin/CBinProject.h
similarity index 68%
copy from src/gis/IGisLine.h
copy to src/gis/bin/CBinProject.h
index 07dc2a6..6302d3e 100644
--- a/src/gis/IGisLine.h
+++ b/src/gis/bin/CBinProject.h
@@ -16,20 +16,24 @@
 
 **********************************************************************************************/
 
-#ifndef IGISLINE_H
-#define IGISLINE_H
+#ifndef CBINPROJECT_H
+#define CBINPROJECT_H
 
-class QPolygonF;
+#include "gis/IGisProject.h"
 
-class IGisLine
+class CBinProject : public IGisProject
 {
     public:
-        IGisLine();
-        virtual ~IGisLine();
+        CBinProject(const QString &name,  CGisListWks * parent);
+        CBinProject(const QString& filename, const QString &key, CGisListWks * parent);
+        virtual ~CBinProject();
+
+        void save();
+        void saveAs();
+
+        static void saveAs(const QString& fn, IGisProject& project);
 
-        virtual void setData(const QPolygonF& line) = 0;
-        virtual void getData(QPolygonF& line) = 0;
 };
 
-#endif //IGISLINE_H
+#endif //CBINPROJECT_H
 
diff --git a/src/gis/bin/serialization.cpp b/src/gis/bin/serialization.cpp
new file mode 100644
index 0000000..259b753
--- /dev/null
+++ b/src/gis/bin/serialization.cpp
@@ -0,0 +1,689 @@
+/**********************************************************************************************
+    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/IGisProject.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/wpt/CGisItemWpt.h"
+#include "gis/rte/CGisItemRte.h"
+#include "gis/ovl/CGisItemOvlArea.h"
+
+#include <QtWidgets>
+
+#define VER_TRK         quint8(1)
+#define VER_WPT         quint8(1)
+#define VER_RTE         quint8(1)
+#define VER_AREA        quint8(1)
+#define VER_LINK        quint8(1)
+#define VER_TRKSEG      quint8(1)
+#define VER_TRKPT       quint8(1)
+#define VER_WPT_T       quint8(1)
+#define VER_GC_T        quint8(1)
+#define VER_GCLOG_T     quint8(1)
+#define VER_IMAGE       quint8(1)
+#define VER_PROJECT     quint8(1)
+#define VER_COPYRIGHT   quint8(1)
+#define VER_PERSON      quint8(1)
+#define VER_HIST        quint8(1)
+#define VER_HIST_EVT    quint8(1)
+#define VER_ITEM        quint8(1)
+
+#define MAGIC_SIZE      10
+#define MAGIC_TRK       "QMTrk     "
+#define MAGIC_WPT       "QMWpt     "
+#define MAGIC_RTE       "QMRte     "
+#define MAGIC_AREA      "QMArea    "
+#define MAGIC_PROJ      "QMProj    "
+
+#define ITEM_WPT        quint8(1)
+#define ITEM_TRK        quint8(2)
+#define ITEM_RTE        quint8(3)
+#define ITEM_AREA       quint8(4)
+
+
+QDataStream& operator<<(QDataStream& stream, const IGisItem::link_t& link)
+{
+    stream << VER_LINK << link.uri << link.text << link.type;
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, IGisItem::link_t& link)
+{
+    quint8 version;
+    stream >> version >> link.uri >> link.text >> link.type;
+    return stream;
+}
+
+QDataStream& operator<<(QDataStream& stream, const IGisItem::wpt_t& wpt)
+{
+    stream << VER_WPT_T;
+    stream << wpt.lat;
+    stream << wpt.lon;
+    stream << wpt.ele;
+    stream << wpt.time;
+    stream << wpt.magvar;
+    stream << wpt.geoidheight;
+    stream << wpt.name;
+    stream << wpt.cmt;
+    stream << wpt.desc;
+    stream << wpt.src;
+    stream << wpt.links;
+    stream << wpt.sym;
+    stream << wpt.type;
+    stream << wpt.fix;
+    stream << wpt.sat;
+    stream << wpt.hdop;
+    stream << wpt.vdop;
+    stream << wpt.pdop;
+    stream << wpt.ageofdgpsdata;
+    stream << wpt.dgpsid;
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, IGisItem::wpt_t& wpt)
+{
+    quint8 version;
+    stream >> version;
+    stream >> wpt.lat;
+    stream >> wpt.lon;
+    stream >> wpt.ele;
+    stream >> wpt.time;
+    stream >> wpt.magvar;
+    stream >> wpt.geoidheight;
+    stream >> wpt.name;
+    stream >> wpt.cmt;
+    stream >> wpt.desc;
+    stream >> wpt.src;
+    stream >> wpt.links;
+    stream >> wpt.sym;
+    stream >> wpt.type;
+    stream >> wpt.fix;
+    stream >> wpt.sat;
+    stream >> wpt.hdop;
+    stream >> wpt.vdop;
+    stream >> wpt.pdop;
+    stream >> wpt.ageofdgpsdata;
+    stream >> wpt.dgpsid;
+
+    return stream;
+}
+
+QDataStream& operator<<(QDataStream& stream, const IGisItem::history_event_t& e)
+{
+    stream << VER_HIST_EVT;
+    stream << e.time;
+    stream << e.icon;
+    stream << e.comment;
+    stream << e.data;
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, IGisItem::history_event_t& e)
+{
+    quint8 version;
+    stream >> version;
+    stream >> e.time;
+    stream >> e.icon;
+    stream >> e.comment;
+    stream >> e.data;
+    return stream;
+}
+
+QDataStream& operator<<(QDataStream& stream, const IGisItem::history_t& h)
+{
+    stream << VER_HIST;
+    stream << h.histIdxInitial;
+    stream << h.histIdxCurrent;
+    stream << h.events;
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, IGisItem::history_t& h)
+{
+    quint8 version;
+    stream >> version;
+    stream >> h.histIdxInitial;
+    stream >> h.histIdxCurrent;
+    stream >> h.events;
+    return stream;
+}
+
+
+QDataStream& operator<<(QDataStream& stream, const CGisItemWpt::geocachelog_t& log)
+{
+    stream << VER_GCLOG_T;
+    stream << log.id;
+    stream << log.date;
+    stream << log.type;
+    stream << log.finderId;
+    stream << log.finder;
+    stream << quint8(log.textIsHtml);
+    stream << log.text;
+
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, CGisItemWpt::geocachelog_t& log)
+{
+    quint8 version, tmp8;
+
+    stream >> version;
+    stream >> log.id;
+    stream >> log.date;
+    stream >> log.type;
+    stream >> log.finderId;
+    stream >> log.finder;
+    stream >> tmp8;
+    log.textIsHtml = tmp8;
+    stream >> log.text;
+
+    return stream;
+}
+
+QDataStream& operator<<(QDataStream& stream, const CGisItemWpt::geocache_t& geocache)
+{
+    stream << VER_GC_T;
+    stream << quint8(geocache.hasData);
+    if(geocache.hasData)
+    {
+        stream << geocache.id;
+        stream << quint8(geocache.available);
+        stream << quint8(geocache.archived);
+        stream << geocache.difficulty;
+        stream << geocache.terrain;
+        stream << geocache.status;
+        stream << geocache.name;
+        stream << geocache.owner;
+        stream << geocache.ownerId;
+        stream << geocache.type;
+        stream << geocache.container;
+        stream << quint8(geocache.shortDescIsHtml);
+        stream << geocache.shortDesc;
+        stream << quint8(geocache.longDescIsHtml);
+        stream << geocache.longDesc;
+        stream << geocache.hint;
+        stream << geocache.country;
+        stream << geocache.state;
+        stream << geocache.locale;
+        stream << geocache.logs;
+    }
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, CGisItemWpt::geocache_t& geocache)
+{
+    quint8 version, tmp8;
+
+    stream >> version;
+    stream >> tmp8;
+    geocache.hasData = tmp8;
+    if(geocache.hasData)
+    {
+        stream >> geocache.id;
+        stream >> tmp8;
+        geocache.available = tmp8;
+        stream >> tmp8;
+        geocache.archived = tmp8;
+        stream >> geocache.difficulty;
+        stream >> geocache.terrain;
+        stream >> geocache.status;
+        stream >> geocache.name;
+        stream >> geocache.owner;
+        stream >> geocache.ownerId;
+        stream >> geocache.type;
+        stream >> geocache.container;
+        stream >> tmp8;
+        geocache.shortDescIsHtml = tmp8;
+        stream >> geocache.shortDesc;
+        stream >> tmp8;
+        geocache.longDescIsHtml = tmp8;
+        stream >> geocache.longDesc;
+        stream >> geocache.hint;
+        stream >> geocache.country;
+        stream >> geocache.state;
+        stream >> geocache.locale;
+        stream >> geocache.logs;
+    }
+    return stream;
+}
+
+QDataStream& operator<<(QDataStream& stream, const CGisItemWpt::image_t& image)
+{
+    QBuffer imgBuf;
+    image.pixmap.save(&imgBuf,"JPEG");
+
+    stream << VER_IMAGE;
+    stream << imgBuf.data();
+    stream << image.direction;
+    stream << image.info;
+    stream << image.filePath;
+    stream << image.fileName;
+
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, CGisItemWpt::image_t& image)
+{
+    quint8 version;
+    QBuffer imgBuf;
+
+    stream >> version;
+    stream >> imgBuf.buffer();
+    stream >> image.direction;
+    stream >> image.info;
+    stream >> image.filePath;
+    stream >> image.fileName;
+
+    image.pixmap.load(&imgBuf,"JPEG");
+
+    return stream;
+}
+
+QDataStream& operator<<(QDataStream& stream, const CGisItemTrk::trkseg_t& seg)
+{
+    stream << VER_TRKSEG << seg.pts;
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, CGisItemTrk::trkseg_t& seg)
+{
+    quint8 version;
+    stream >> version >> seg.pts;
+    return stream;
+}
+
+QDataStream& operator<<(QDataStream& stream, const CGisItemTrk::trkpt_t& pt)
+{
+    stream << VER_TRKPT << pt.flags;
+    stream << (const IGisItem::wpt_t&)pt;
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, CGisItemTrk::trkpt_t& pt)
+{
+    quint8 version;
+    stream >> version >> pt.flags;
+    stream >> (IGisItem::wpt_t&)pt;
+    return stream;
+}
+
+QDataStream& operator<<(QDataStream& stream, const IGisProject::copyright_t& c)
+{
+    stream << VER_COPYRIGHT << c.author << c.year << c.license;
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, IGisProject::copyright_t& c)
+{
+    quint8 version;
+    stream >> version >> c.author >> c.year >> c.license;
+    return stream;
+}
+
+QDataStream& operator<<(QDataStream& stream, const IGisProject::person_t& p)
+{
+    stream << VER_PERSON << p.name << p.id << p.domain << p.link;
+    return stream;
+}
+
+QDataStream& operator>>(QDataStream& stream, IGisProject::person_t& p)
+{
+    quint8 version;
+    stream >> version >> p.name >> p.id >> p.domain >> p.link;
+    return stream;
+}
+
+
+// ---------------- main objects ---------------------------------
+
+QDataStream& CGisItemTrk::operator>>(QDataStream& stream)
+{
+    QByteArray  buffer;
+    QDataStream out(&buffer, QIODevice::WriteOnly);
+    out.setByteOrder(QDataStream::LittleEndian);
+    out.setVersion(QDataStream::Qt_5_2);
+
+    out << key;
+    out << flags;
+    out << trk.name;
+    out << trk.cmt;
+    out << trk.desc;
+    out << trk.src;
+    out << trk.links;
+    out << trk.number;
+    out << trk.type;
+    out << trk.color;
+    out << trk.segs;
+
+    stream.writeRawData(MAGIC_TRK, MAGIC_SIZE);
+    stream << VER_TRK;
+    stream << qCompress(buffer,9);
+    return stream;
+}
+
+QDataStream& CGisItemTrk::operator<<(QDataStream& stream)
+{
+    quint8      version;
+    QByteArray  buffer;
+    QIODevice * dev = stream.device();
+    qint64      pos = dev->pos();
+
+    char magic[10];
+    stream.readRawData(magic,MAGIC_SIZE);
+
+    if(strncmp(magic,MAGIC_TRK,MAGIC_SIZE))
+    {
+        dev->seek(pos);
+        return stream;
+    }
+
+    stream >> version;
+    stream >> buffer;
+    buffer = qUncompress(buffer);
+
+    QDataStream in(&buffer, QIODevice::ReadOnly);
+    in.setByteOrder(QDataStream::LittleEndian);
+    in.setVersion(QDataStream::Qt_5_2);
+
+    in >> key;
+    in >> flags;
+    in >> trk.name;
+    in >> trk.cmt;
+    in >> trk.desc;
+    in >> trk.src;
+    in >> trk.links;
+    in >> trk.number;
+    in >> trk.type;
+    in >> trk.color;
+
+    trk.segs.clear();
+    in >> trk.segs;
+
+    deriveSecondaryData();
+    setColor(trk.color);
+    setText(0, trk.name);
+    setToolTip(0, getInfo());
+
+    return stream;
+}
+
+QDataStream& CGisItemWpt::operator<<(QDataStream& stream)
+{
+    quint8      version;
+    QByteArray  buffer;
+    QIODevice * dev = stream.device();
+    qint64      pos = dev->pos();
+
+    char magic[10];
+    stream.readRawData(magic,MAGIC_SIZE);
+
+    if(strncmp(magic,MAGIC_WPT,MAGIC_SIZE))
+    {
+        dev->seek(pos);
+        return stream;
+    }
+
+    stream >> version;
+    stream >> buffer;
+    buffer = qUncompress(buffer);
+
+    QDataStream in(&buffer, QIODevice::ReadOnly);
+    in.setByteOrder(QDataStream::LittleEndian);
+    in.setVersion(QDataStream::Qt_5_2);
+
+    in >> key;
+    in >> flags;
+    in >> proximity;
+    in >> wpt;
+    in >> geocache;
+    in >> images;
+
+    setIcon();
+    setText(0, wpt.name);
+    setToolTip(0, getInfo());
+
+    return stream;
+}
+
+QDataStream& CGisItemWpt::operator>>(QDataStream& stream)
+{
+    QByteArray  buffer;
+    QDataStream out(&buffer, QIODevice::WriteOnly);
+    out.setByteOrder(QDataStream::LittleEndian);
+    out.setVersion(QDataStream::Qt_5_2);
+
+    out << key;
+    out << flags;
+    out << proximity;
+    out << wpt;
+    out << geocache;
+    out << images;
+
+    stream.writeRawData(MAGIC_WPT, MAGIC_SIZE);
+    stream << VER_WPT;
+    stream << qCompress(buffer,9);
+
+    return stream;
+}
+
+QDataStream& CGisItemRte::operator<<(QDataStream& stream)
+{
+    return stream;
+}
+
+QDataStream& CGisItemRte::operator>>(QDataStream& stream)
+{
+
+    return stream;
+}
+
+QDataStream& CGisItemOvlArea::operator<<(QDataStream& stream)
+{    
+    quint8      version, tmp8;
+    QByteArray  buffer;
+    QIODevice * dev = stream.device();
+    qint64      pos = dev->pos();
+
+    char magic[10];
+    stream.readRawData(magic,MAGIC_SIZE);
+
+    if(strncmp(magic,MAGIC_AREA,MAGIC_SIZE))
+    {
+        dev->seek(pos);
+        return stream;
+    }
+
+    stream >> version;
+    stream >> buffer;
+    buffer = qUncompress(buffer);
+
+    QDataStream in(&buffer, QIODevice::ReadOnly);
+    in.setByteOrder(QDataStream::LittleEndian);
+    in.setVersion(QDataStream::Qt_5_2);
+
+    in >> key;
+    in >> flags;
+    in >> area.name;
+    in >> area.cmt;
+    in >> area.desc;
+    in >> area.src;
+    in >> area.links;
+    in >> area.number;
+    in >> area.type;
+    in >> area.pts;
+    in >> area.color;
+    in >> area.width;
+    in >> area.style;
+    in >> tmp8;
+    area.opacity = tmp8;
+
+    deriveSecondaryData();
+    setColor(str2color(area.color));
+    setText(0, area.name);
+    setToolTip(0, getInfo());
+
+    return stream;
+}
+
+QDataStream& CGisItemOvlArea::operator>>(QDataStream& stream)
+{
+    QByteArray  buffer;
+    QDataStream out(&buffer, QIODevice::WriteOnly);
+    out.setByteOrder(QDataStream::LittleEndian);
+    out.setVersion(QDataStream::Qt_5_2);
+
+    out << key;
+    out << flags;
+    out << area.name;
+    out << area.cmt;
+    out << area.desc;
+    out << area.src;
+    out << area.links;
+    out << area.number;
+    out << area.type;
+    out << area.pts;
+    out << area.color;
+    out << area.width;
+    out << area.style;
+    out << quint8(area.opacity);
+
+    stream.writeRawData(MAGIC_AREA, MAGIC_SIZE);
+    stream << VER_AREA;
+    stream << qCompress(buffer,9);
+
+    return stream;
+}
+
+QDataStream& IGisProject::operator<<(QDataStream& stream)
+{
+
+    quint8      version;
+    QIODevice * dev = stream.device();
+    qint64      pos = dev->pos();
+
+    char magic[10];
+    stream.readRawData(magic,MAGIC_SIZE);
+
+    if(strncmp(magic,MAGIC_PROJ,MAGIC_SIZE))
+    {
+        dev->seek(pos);
+        return stream;
+    }
+
+    stream >> version;
+    stream >> filename;
+    stream >> metadata.name;
+    stream >> metadata.desc;
+    stream >> metadata.author;
+    stream >> metadata.copyright;
+    stream >> metadata.links;
+    stream >> metadata.time;
+    stream >> metadata.keywords;
+    stream >> metadata.bounds;
+
+    while(!stream.atEnd())
+    {
+        IGisItem::history_t history;
+        quint8 version, type;
+        stream >> version;
+        stream >> type;
+        stream >> history;
+        switch(type)
+        {
+            case ITEM_WPT:
+                new CGisItemWpt(history, this);
+                break;
+            case ITEM_TRK:
+                new CGisItemTrk(history, this);
+                break;
+            case ITEM_RTE:
+                new CGisItemRte(history, this);
+                break;
+            case ITEM_AREA:
+                new CGisItemOvlArea(history, this);
+                break;
+            default:;
+        }
+    }
+
+    return stream;
+}
+
+QDataStream& IGisProject::operator>>(QDataStream& stream)
+{
+    stream.writeRawData(MAGIC_PROJ, MAGIC_SIZE);
+    stream << VER_PROJECT;
+
+    stream << filename;
+    stream << metadata.name;
+    stream << metadata.desc;
+    stream << metadata.author;
+    stream << metadata.copyright;
+    stream << metadata.links;
+    stream << metadata.time;
+    stream << metadata.keywords;
+    stream << metadata.bounds;
+
+    for(int i = 0; i < childCount(); i++)
+    {
+        CGisItemTrk * item = dynamic_cast<CGisItemTrk*>(child(i));
+        if(item == 0)
+        {
+            continue;
+        }
+        stream << VER_ITEM;
+        stream << ITEM_TRK;
+        stream << item->getHistory();
+    }
+    for(int i = 0; i < childCount(); i++)
+    {
+        CGisItemRte * item = dynamic_cast<CGisItemRte*>(child(i));
+        if(item == 0)
+        {
+            continue;
+        }
+        stream << VER_ITEM;
+        stream << ITEM_RTE;
+        stream << item->getHistory();
+    }
+    for(int i = 0; i < childCount(); i++)
+    {
+        CGisItemWpt * item = dynamic_cast<CGisItemWpt*>(child(i));
+        if(item == 0)
+        {
+            continue;
+        }
+        stream << VER_ITEM;
+        stream << ITEM_WPT;
+        stream << item->getHistory();
+    }
+    for(int i = 0; i < childCount(); i++)
+    {
+        CGisItemOvlArea * item = dynamic_cast<CGisItemOvlArea*>(child(i));
+        if(item == 0)
+        {
+            continue;
+        }
+        stream << VER_ITEM;
+        stream << ITEM_AREA;
+        stream << item->getHistory();
+    }
+
+
+    return stream;
+}
+
diff --git a/src/gis/gpx/CGpxProject.cpp b/src/gis/gpx/CGpxProject.cpp
index a4144e9..b0ff6f3 100644
--- a/src/gis/gpx/CGpxProject.cpp
+++ b/src/gis/gpx/CGpxProject.cpp
@@ -17,6 +17,7 @@
 **********************************************************************************************/
 
 #include "gis/gpx/CGpxProject.h"
+#include "gis/bin/CBinProject.h"
 #include "gis/CGisListWks.h"
 #include "gis/wpt/CGisItemWpt.h"
 #include "gis/trk/CGisItemTrk.h"
@@ -24,38 +25,25 @@
 #include "gis/ovl/CGisItemOvlArea.h"
 #include "gis/CGisDraw.h"
 #include "helpers/CSettings.h"
-#include "version.h"
 
 
-#include <QtWidgets>
-#include <QtXml>
 
-const QString CGpxProject::gpx_ns      = "http://www.topografix.com/GPX/1/1";
-const QString CGpxProject::xsi_ns      = "http://www.w3.org/2001/XMLSchema-instance";
-const QString CGpxProject::gpxx_ns     = "http://www.garmin.com/xmlschemas/GpxExtensions/v3";
-const QString CGpxProject::gpxtpx_ns   = "http://www.garmin.com/xmlschemas/TrackPointExtension/v1";
-const QString CGpxProject::wptx1_ns    = "http://www.garmin.com/xmlschemas/WaypointExtension/v1";
-const QString CGpxProject::rmc_ns      = "urn:net:trekbuddy:1.0:nmea:rmc";
-const QString CGpxProject::ql_ns       = "http://www.qlandkarte.org/xmlschemas/v1.1";
-const QString CGpxProject::gs_ns       = "http://www.groundspeak.com/cache/1/0";
+#include <QtWidgets>
 
 CGpxProject::CGpxProject(const QString &name,  CGisListWks * parent)
-    : IGisProject("", parent)
-    , valid(true)
+    : IGisProject("", "", parent)
 {
     setText(0, name);
-    setIcon(0,QIcon("://icons/32x32/GisProject.png"));
-
+    setIcon(0,QIcon("://icons/32x32/GpxProject.png"));
     setToolTip(0, getInfo());
+    valid = true;
 }
 
 CGpxProject::CGpxProject(const QString &filename, const QString& key, CGisListWks *parent)
-    : IGisProject(key, parent)
-    , filename(filename)
-    , valid(false)
+    : IGisProject(key, filename, parent)
 {
     setText(0, QFileInfo(filename).baseName());
-    setIcon(0,QIcon("://icons/32x32/GisProject.png"));
+    setIcon(0,QIcon("://icons/32x32/GpxProject.png"));
 
     // cerate file instance
     QFile file(filename);
@@ -92,14 +80,12 @@ CGpxProject::CGpxProject(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();
     for(int n = 0; n < N; ++n)
     {
         const QDomNode& xmlTrk = xmlTrks.item(n);
-        QTreeWidgetItem * item = new CGisItemTrk(xmlTrk, this);
-        items << item;
+        new CGisItemTrk(xmlTrk, this);
     }
 
     const QDomNodeList& xmlRtes = xmlGpx.elementsByTagName("rte");
@@ -107,8 +93,7 @@ CGpxProject::CGpxProject(const QString &filename, const QString& key, CGisListWk
     for(int n = 0; n < N; ++n)
     {
         const QDomNode& xmlRte = xmlRtes.item(n);
-        QTreeWidgetItem * item = new CGisItemRte(xmlRte, this);
-        items << item;
+        new CGisItemRte(xmlRte, this);
     }
 
     const QDomNodeList& xmlWpts = xmlGpx.elementsByTagName("wpt");
@@ -116,8 +101,7 @@ CGpxProject::CGpxProject(const QString &filename, const QString& key, CGisListWk
     for(int n = 0; n < N; ++n)
     {
         const QDomNode& xmlWpt = xmlWpts.item(n);
-        QTreeWidgetItem * item = new CGisItemWpt(xmlWpt, this);
-        items << item;
+        new CGisItemWpt(xmlWpt, this);
     }
 
     const QDomElement& xmlExtension = xmlGpx.namedItem("extensions").toElement();
@@ -126,12 +110,9 @@ CGpxProject::CGpxProject(const QString &filename, const QString& key, CGisListWk
     for(int n = 0; n < N; ++n)
     {
         const QDomNode& xmlArea = xmlAreas.item(n);
-        QTreeWidgetItem * item = new CGisItemOvlArea(xmlArea, this);
-        items << item;
+        new CGisItemOvlArea(xmlArea, this);
     }
 
-
-    addChildren(items);
     setToolTip(0, getInfo());
 
     valid = true;
@@ -142,208 +123,59 @@ CGpxProject::~CGpxProject()
 
 }
 
-QString CGpxProject::getInfo()
+void CGpxProject::save()
 {
-    QString str = metadata.name.isEmpty() ? text(0) : metadata.name;
-
-    if(metadata.time.isValid())
+    if(filename.isEmpty())
     {
-        str += "\n";
-        str += IUnit::datetime2string(metadata.time, false);
+        saveAs();
     }
-
-
-    if(!metadata.desc.isEmpty())
+    else
     {
-        str += "\n";
-
-        if(metadata.desc.count() < 200)
-        {
-            str += metadata.desc;
-        }
-        else
-        {
-            str += metadata.desc.left(197) + "...";
-        }
+        saveAs(filename, *this);
+        markAsSaved();
     }
-
-
-    return str;
 }
 
-void CGpxProject::readMetadata(const QDomNode& xml, metadata_t& metadata)
+void CGpxProject::saveAs()
 {
+    SETTINGS;
+    QString path = cfg.value("Paths/lastGisPath", QDir::homePath()).toString();
 
-    IGisItem::readXml(xml,"name", metadata.name);
-    IGisItem::readXml(xml,"desc", metadata.desc);
-
-    const QDomNode& xmlAuthor = xml.namedItem("author");
-    if(xmlAuthor.isElement())
-    {
-        IGisItem::readXml(xml,"name", metadata.author.name);
-
-        const QDomNode& xmlEmail = xmlAuthor.namedItem("email");
-        if(xmlEmail.isElement())
-        {
-            const QDomNamedNodeMap& attr = xmlEmail.attributes();
-            metadata.author.id = attr.namedItem("id").nodeValue();
-            metadata.author.domain = attr.namedItem("domain").nodeValue();
-        }
-
-        const QDomNode& xmlLink = xmlAuthor.namedItem("link");
-        if(xmlLink.isElement())
-        {
-            metadata.author.link.uri.setUrl(xmlLink.attributes().namedItem("href").nodeValue());
-            IGisItem::readXml(xmlLink, "text", metadata.author.link.text);
-            IGisItem::readXml(xmlLink, "type", metadata.author.link.type);
-        }
-    }
-
-    const QDomNode& xmlCopyright = xml.namedItem("copyright");
-    if(xmlCopyright.isElement())
-    {
-        metadata.copyright.author = xmlCopyright.attributes().namedItem("author").nodeValue();
-        IGisItem::readXml(xmlCopyright, "year", metadata.copyright.year);
-        IGisItem::readXml(xmlCopyright, "license", metadata.copyright.license);
-    }
-
-    IGisItem::readXml(xml,"link", metadata.links);
-    IGisItem::readXml(xml,"time", metadata.time);
-    IGisItem::readXml(xml,"keywords", metadata.keywords);
-
-    const QDomNode& xmlBounds = xml.namedItem("bounds");
-    if(xmlBounds.isElement())
-    {
-        const QDomNamedNodeMap& attr = xmlBounds.attributes();
-        metadata.bounds.setLeft(attr.namedItem("minlon").nodeValue().toDouble());
-        metadata.bounds.setTop(attr.namedItem("maxlat").nodeValue().toDouble());
-        metadata.bounds.setRight(attr.namedItem("maxlon").nodeValue().toDouble());
-        metadata.bounds.setBottom(attr.namedItem("minlat").nodeValue().toDouble());
-    }
-}
+    QString filter = "*.gpx";
+    QString fn = QFileDialog::getSaveFileName(0, QObject::tr("Save GIS data to..."), path, "*.gpx;; *.qms", &filter);
 
-QDomNode CGpxProject::writeMetadata(QDomDocument& doc)
-{
-    QDomElement gpx = doc.createElement("gpx");
-    doc.appendChild(gpx);
-
-    gpx.setAttribute("version","1.1");
-    gpx.setAttribute("creator","QMapShack " VER_STR " http://www.qlandkarte.org/");
-    gpx.setAttribute("xmlns",gpx_ns);
-    gpx.setAttribute("xmlns:xsi",xsi_ns);
-    gpx.setAttribute("xmlns:gpxx",gpxx_ns);
-    gpx.setAttribute("xmlns:gpxtpx",gpxtpx_ns);
-    gpx.setAttribute("xmlns:wptx1",wptx1_ns);
-    gpx.setAttribute("xmlns:rmc",rmc_ns);
-    gpx.setAttribute("xmlns:ql",ql_ns);
-
-    QString schemaLocation = QString()
-        + gpx_ns    + " http://www.topografix.com/GPX/1/1/gpx.xsd "
-        + gpxx_ns   + " http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd "
-        + gpxtpx_ns + " http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd "
-        + wptx1_ns  + " http://www.garmin.com/xmlschemas/WaypointExtensionv1.xsd"
-        + ql_ns     + " http://www.qlandkarte.org/xmlschemas/v1.1/ql-extensions.xsd";
-
-    gpx.setAttribute("xsi:schemaLocation", schemaLocation);
-
-    QDomElement xmlMetadata = doc.createElement("metadata");
-    gpx.appendChild(xmlMetadata);
-
-    IGisItem::writeXml(xmlMetadata,"name", metadata.name);
-    IGisItem::writeXml(xmlMetadata,"desc", metadata.desc);
-
-    if(!metadata.author.name.isEmpty())
+    if(fn.isEmpty())
     {
-        QDomElement xmlAuthor = doc.createElement("author");
-        xmlMetadata.appendChild(xmlAuthor);
-
-        IGisItem::writeXml(xmlAuthor,"name", metadata.author.name);
-
-        if(!metadata.author.id.isEmpty() && !metadata.author.domain.isEmpty())
-        {
-            QDomElement xmlEmail = doc.createElement("email");
-            xmlAuthor.appendChild(xmlEmail);
-            xmlEmail.setAttribute("id", metadata.author.id);
-            xmlEmail.setAttribute("domain", metadata.author.domain);
-        }
-
-        if(metadata.author.link.uri.isValid())
-        {
-            QDomElement xmlLink = doc.createElement("link");
-            xmlAuthor.appendChild(xmlLink);
-
-            xmlLink.setAttribute("href", metadata.author.link.uri.toString());
-            IGisItem::writeXml(xmlLink, "text", metadata.author.link.text);
-            IGisItem::writeXml(xmlLink, "type", metadata.author.link.type);
-
-        }
+        return;
     }
 
-    if(!metadata.copyright.author.isEmpty())
-    {
-        QDomElement xmlCopyright = doc.createElement("copyright");
-        xmlMetadata.appendChild(xmlCopyright);
-
-        xmlCopyright.setAttribute("author", metadata.copyright.author);
-        IGisItem::writeXml(xmlCopyright, "year", metadata.copyright.year);
-        IGisItem::writeXml(xmlCopyright, "license", metadata.copyright.license);
 
-    }
-    IGisItem::writeXml(xmlMetadata, "link", metadata.links);
-    IGisItem::writeXml(xmlMetadata, "time", metadata.time);
-    IGisItem::writeXml(xmlMetadata, "keywords", metadata.keywords);
-
-    if(metadata.bounds.isValid())
+    if(filter == "*.gpx")
     {
-        QDomElement xmlBounds = doc.createElement("bounds");
-        xmlMetadata.appendChild(xmlBounds);
+        saveAs(fn, *this);
 
-        xmlBounds.setAttribute("minlat", metadata.bounds.bottom());
-        xmlBounds.setAttribute("minlon", metadata.bounds.left());
-        xmlBounds.setAttribute("maxlat", metadata.bounds.top());
-        xmlBounds.setAttribute("maxlon", metadata.bounds.right());
+        filename = fn;
+        setText(0, QFileInfo(filename).baseName());
+        markAsSaved();
 
     }
-
-    return gpx;
-}
-
-
-
-
-void CGpxProject::save()
-{
-    if(filename.isEmpty())
+    else if(filter == "*.qms")
     {
-        saveAs();
+        CBinProject::saveAs(fn, *this);
     }
     else
     {
-        saveGpx(filename);
-    }
-}
-
-void CGpxProject::saveAs()
-{
-    SETTINGS;
-    QString path = cfg.value("Paths/lastGisPath", QDir::homePath()).toString();
-
-    QString fn = QFileDialog::getSaveFileName(0, QObject::tr("Save GIS data to..."), path, "*.gpx");
-
-    if(fn.isEmpty())
-    {
         return;
     }
-    saveGpx(fn);
 
     path = QFileInfo(fn).absolutePath();
     cfg.setValue("Paths/lastGisPath", path);
 }
 
-void CGpxProject::saveGpx(const QString& fn)
+
+void CGpxProject::saveAs(const QString& fn, IGisProject& project)
 {
     QString _fn_ = fn;
-
     QFileInfo fi(_fn_);
     if(fi.suffix() != "gpx")
     {
@@ -400,29 +232,29 @@ void CGpxProject::saveGpx(const QString& fn)
     QDomDocument doc;
 
     //  ---- start content of gpx
-    QDomNode gpx = writeMetadata(doc);
+    QDomNode gpx = project.writeMetadata(doc);
 
-    for(int i = 0; i < childCount(); i++)
+    for(int i = 0; i < project.childCount(); i++)
     {
-        CGisItemWpt * item = dynamic_cast<CGisItemWpt*>(child(i));
+        CGisItemWpt * item = dynamic_cast<CGisItemWpt*>(project.child(i));
         if(item == 0)
         {
             continue;
         }
         item->save(gpx);
     }
-    for(int i = 0; i < childCount(); i++)
+    for(int i = 0; i < project.childCount(); i++)
     {
-        CGisItemRte * item = dynamic_cast<CGisItemRte*>(child(i));
+        CGisItemRte * item = dynamic_cast<CGisItemRte*>(project.child(i));
         if(item == 0)
         {
             continue;
         }
         item->save(gpx);
     }
-    for(int i = 0; i < childCount(); i++)
+    for(int i = 0; i < project.childCount(); i++)
     {
-        CGisItemTrk * item = dynamic_cast<CGisItemTrk*>(child(i));
+        CGisItemTrk * item = dynamic_cast<CGisItemTrk*>(project.child(i));
         if(item == 0)
         {
             continue;
@@ -432,9 +264,9 @@ void CGpxProject::saveGpx(const QString& fn)
 
     QDomElement xmlExt = doc.createElement("extensions");
     gpx.appendChild(xmlExt);
-    for(int i = 0; i < childCount(); i++)
+    for(int i = 0; i < project.childCount(); i++)
     {
-        CGisItemOvlArea * item = dynamic_cast<CGisItemOvlArea*>(child(i));
+        CGisItemOvlArea * item = dynamic_cast<CGisItemOvlArea*>(project.child(i));
         if(item == 0)
         {
             continue;
@@ -460,10 +292,5 @@ void CGpxProject::saveGpx(const QString& fn)
         QMessageBox::warning(0, QObject::tr("Saveing GIS data failed..."), QObject::tr("Failed to write file '%1'").arg(_fn_), QMessageBox::Abort);
         return;
     }
-
-
-    filename = _fn_;
-    setText(0, QFileInfo(filename).baseName());
-    setText(1,"");
 }
 
diff --git a/src/gis/gpx/CGpxProject.h b/src/gis/gpx/CGpxProject.h
index 79c1290..0c19f45 100644
--- a/src/gis/gpx/CGpxProject.h
+++ b/src/gis/gpx/CGpxProject.h
@@ -19,7 +19,6 @@
 #ifndef CGPXPROJECT_H
 #define CGPXPROJECT_H
 
-#include "gis/IGisItem.h"
 #include "gis/IGisProject.h"
 
 #include <QDomElement>
@@ -37,77 +36,18 @@ class CGpxProject : public IGisProject
         CGpxProject(const QString& filename, const QString &key, CGisListWks * parent);
         virtual ~CGpxProject();
 
-        /**
-           @brief Check if the project was initialized correctly.
-
-           For example a if a GPX file does not load correctly the project is invalid.
-
-           @return True if project is valid
-         */
-        bool  isValid(){return valid;}
-
         void save();
         void saveAs();
 
-        QString getInfo();
+        static void saveAs(const QString& fn, IGisProject& project);
 
-        // Those are the URIs of the GPX extensions we support
-        static const QString gpxx_ns;
-        static const QString gpxtpx_ns;
-        static const QString wptx1_ns;
-        static const QString rmc_ns;
-        static const QString ql_ns;
-        static const QString gs_ns;
 
     private:
-        struct metadata_t;
-
         void saveGpx(const QString& fn);
-        QDomNode writeMetadata(QDomDocument& doc);
-        void readMetadata(const QDomNode& xml, metadata_t& metadata);
-
-        // Those are standard GPX/XML namespaces
-        static const QString gpx_ns;
-        static const QString xsi_ns;
-
-        struct person_t
-        {
-            QString name;
-            QString id;
-            QString domain;
-            IGisItem::link_t link;
-        };
-
-        struct copyright_t
-        {
-            QString author;
-            QString year;
-            QString license;
-        };
-
-        struct metadata_t
-        {
-            QString name;
-            QString desc;
-            person_t author;
-            copyright_t copyright;
-            QList<IGisItem::link_t> links;
-            QDateTime time;
-            QString keywords;
-            QRectF bounds;
-            // -- all gpx tags - stop
-            QMap<QString, QVariant> extensions;
-
-        };
-
-        QString key;
-
-        metadata_t metadata;
-        QString filename;
+
 
         QDomElement xmlGpx;
 
-        bool valid;
 };
 
 #endif //CGPXPROJECT_H
diff --git a/src/gis/gpx/serialization.cpp b/src/gis/gpx/serialization.cpp
new file mode 100644
index 0000000..7028828
--- /dev/null
+++ b/src/gis/gpx/serialization.cpp
@@ -0,0 +1,931 @@
+/**********************************************************************************************
+    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/IGisProject.h"
+#include "gis/wpt/CGisItemWpt.h"
+#include "gis/trk/CGisItemTrk.h"
+#include "gis/rte/CGisItemRte.h"
+#include "gis/ovl/CGisItemOvlArea.h"
+#include "gis/WptIcons.h"
+#include "version.h"
+
+#include <QtXml>
+#include <proj_api.h>
+const QString IGisProject::gpx_ns      = "http://www.topografix.com/GPX/1/1";
+const QString IGisProject::xsi_ns      = "http://www.w3.org/2001/XMLSchema-instance";
+const QString IGisProject::gpxx_ns     = "http://www.garmin.com/xmlschemas/GpxExtensions/v3";
+const QString IGisProject::gpxtpx_ns   = "http://www.garmin.com/xmlschemas/TrackPointExtension/v1";
+const QString IGisProject::wptx1_ns    = "http://www.garmin.com/xmlschemas/WaypointExtension/v1";
+const QString IGisProject::rmc_ns      = "urn:net:trekbuddy:1.0:nmea:rmc";
+const QString IGisProject::ql_ns       = "http://www.qlandkarte.org/xmlschemas/v1.1";
+const QString IGisProject::gs_ns       = "http://www.groundspeak.com/cache/1/0";
+
+static void readXml(const QDomNode& xml, const QString& tag, bool& value)
+{
+    if(xml.namedItem(tag).isElement())
+    {
+        bool tmp;
+        bool ok = false;
+        tmp = xml.namedItem(tag).toElement().text().toInt(&ok);
+        if(ok)
+        {
+            value = tmp;
+        }
+    }
+}
+
+static void readXml(const QDomNode& xml, const QString& tag, qint32& value)
+{
+    if(xml.namedItem(tag).isElement())
+    {
+        qint32 tmp;
+        bool ok = false;
+        tmp = xml.namedItem(tag).toElement().text().toInt(&ok);
+        if(!ok)
+        {
+            tmp = qRound(xml.namedItem(tag).toElement().text().toDouble(&ok));
+        }
+        if(ok)
+        {
+            value = tmp;
+        }
+    }
+}
+
+static void readXml(const QDomNode& xml, const QString& tag, quint32& value)
+{
+    if(xml.namedItem(tag).isElement())
+    {
+        quint32 tmp;
+        bool ok = false;
+        tmp = xml.namedItem(tag).toElement().text().toUInt(&ok);
+        if(ok)
+        {
+            value = tmp;
+        }
+    }
+}
+
+static void readXml(const QDomNode& xml, const QString& tag, quint64& value)
+{
+    if(xml.namedItem(tag).isElement())
+    {
+        quint64 tmp;
+        bool ok = false;
+        tmp = xml.namedItem(tag).toElement().text().toULongLong(&ok);
+        if(ok)
+        {
+            value = tmp;
+        }
+    }
+}
+
+static void readXml(const QDomNode& xml, const QString& tag, qreal& value)
+{
+    if(xml.namedItem(tag).isElement())
+    {
+        qreal tmp;
+        bool ok = false;
+        tmp = xml.namedItem(tag).toElement().text().toDouble(&ok);
+        if(ok)
+        {
+            value = tmp;
+        }
+    }
+}
+
+static void readXml(const QDomNode& xml, const QString& tag, QString& value)
+{
+    if(xml.namedItem(tag).isElement())
+    {
+        value = xml.namedItem(tag).toElement().text();
+    }
+}
+
+static void readXml(const QDomNode& xml, const QString& tag, QString& value, bool& isHtml)
+{
+    if(xml.namedItem(tag).isElement())
+    {
+        const QDomNamedNodeMap& attr = xml.namedItem(tag).toElement().attributes();
+
+        if(attr.namedItem("html").nodeValue().toLocal8Bit().toLower() == "true")
+        {
+            isHtml = true;
+            value = xml.namedItem(tag).toElement().text();
+        }
+        else
+        {
+            isHtml = false;
+            value = "<pre>" + xml.namedItem(tag).toElement().text() + "</pre>";
+            value = xml.namedItem(tag).toElement().text();
+        }
+
+    }
+}
+
+static void readXml(const QDomNode& xml, const QString& tag, QDateTime& value)
+{
+    if(xml.namedItem(tag).isElement())
+    {
+        QString time = xml.namedItem(tag).toElement().text();
+        IUnit::parseTimestamp(time, value);
+
+    }
+}
+
+static void readXml(const QDomNode& xml, const QString& tag, QList<IGisItem::link_t>& l)
+{
+    if(xml.namedItem(tag).isElement())
+    {
+        const QDomNodeList& links = xml.toElement().elementsByTagName(tag);
+        int N = links.count();
+        for(int n = 0; n < N; ++n)
+        {
+            const QDomNode& link = links.item(n);
+
+            IGisItem::link_t tmp;
+            tmp.uri.setUrl(link.attributes().namedItem("href").nodeValue());
+            readXml(link, "text", tmp.text);
+            readXml(link, "type", tmp.type);
+
+            l << tmp;
+        }
+    }
+}
+
+static void readXml(const QDomNode& xml, IGisItem::history_t& history)
+{
+    if(xml.namedItem("ql:history").isElement())
+    {
+        const QDomElement& xmlHistory = xml.namedItem("ql:history").toElement();
+
+        const QDomNodeList& xmlEntries = xmlHistory.elementsByTagName("ql:event");
+        int N = xmlEntries.count();
+        for(int n = 0; n < N; ++n)
+        {
+            const QDomNode& xmlEntry = xmlEntries.item(n);
+            IGisItem::history_event_t entry;
+            readXml(xmlEntry, "ql:icon", entry.icon);
+            readXml(xmlEntry, "ql:time", entry.time);
+            readXml(xmlEntry, "ql:comment", entry.comment);
+
+            history.events << entry;
+        }
+
+        history.histIdxInitial = history.events.size() - 1;
+        history.histIdxCurrent = history.histIdxInitial;
+    }
+}
+
+
+static void writeXml(QDomNode& xml, const QString& tag, qint32 val)
+{
+    if(val != NOINT)
+    {
+        QDomElement elem = xml.ownerDocument().createElement(tag);
+        xml.appendChild(elem);
+        QDomText text = xml.ownerDocument().createTextNode(QString::number(val));
+        elem.appendChild(text);
+    }
+}
+
+static void writeXml(QDomNode& xml, const QString& tag, quint32 val)
+{
+    if(val != NOINT)
+    {
+        QDomElement elem = xml.ownerDocument().createElement(tag);
+        xml.appendChild(elem);
+        QDomText text = xml.ownerDocument().createTextNode(QString::number(val));
+        elem.appendChild(text);
+    }
+}
+
+static void writeXml(QDomNode& xml, const QString& tag, quint64 val)
+{
+    if(val != 0)
+    {
+        QDomElement elem = xml.ownerDocument().createElement(tag);
+        xml.appendChild(elem);
+        QDomText text = xml.ownerDocument().createTextNode(QString::number(val));
+        elem.appendChild(text);
+    }
+}
+
+static void writeXml(QDomNode& xml, const QString& tag, const QString& val)
+{
+    if(!val.isEmpty())
+    {
+        QDomElement elem = xml.ownerDocument().createElement(tag);
+        xml.appendChild(elem);
+        QDomText text = xml.ownerDocument().createTextNode(val);
+        elem.appendChild(text);
+    }
+}
+
+static void writeXml(QDomNode& xml, const QString& tag, qreal val)
+{
+    if(val != NOFLOAT)
+    {
+        QDomElement elem = xml.ownerDocument().createElement(tag);
+        xml.appendChild(elem);
+        QDomText text = xml.ownerDocument().createTextNode(QString("%1").arg(val,0,'f',8));
+        elem.appendChild(text);
+    }
+}
+
+static void writeXml(QDomNode& xml, const QString& tag, const QString& val, bool isHtml)
+{
+    if(!val.isEmpty())
+    {
+        QDomElement elem = xml.ownerDocument().createElement(tag);
+        xml.appendChild(elem);
+        QDomText text = xml.ownerDocument().createCDATASection(val);
+        elem.appendChild(text);
+        elem.setAttribute("html",isHtml ? "True" : "False");
+
+    }
+}
+
+static void writeXml(QDomNode& xml, const QString& tag, const QDateTime& time)
+{
+    if(time.isValid())
+    {
+        QDomElement elem = xml.ownerDocument().createElement(tag);
+        xml.appendChild(elem);
+        QDomText text = xml.ownerDocument().createTextNode(time.toString("yyyy-MM-dd'T'hh:mm:ss'Z'"));
+        elem.appendChild(text);
+    }
+}
+
+
+static void writeXml(QDomNode& xml, const QString& tag, const QList<IGisItem::link_t>& links)
+{
+    if(!links.isEmpty())
+    {
+        foreach(const IGisItem::link_t& link, links)
+        {
+            QDomElement elem = xml.ownerDocument().createElement(tag);
+            xml.appendChild(elem);
+
+            elem.setAttribute("href", link.uri.toString());
+            writeXml(elem, "text", link.text);
+            writeXml(elem, "type", link.type);
+        }
+    }
+}
+
+static void writeXml(QDomNode& xml, const IGisItem::history_t& history)
+{
+    if(history.events.size() > 1)
+    {
+        QDomElement xmlHistory = xml.ownerDocument().createElement("ql:history");
+        xml.appendChild(xmlHistory);
+        for(int i = 0; i <= history.histIdxCurrent; i++)
+        {
+            const IGisItem::history_event_t& event = history.events[i];
+            QDomElement xmlEvent = xml.ownerDocument().createElement("ql:event");
+            xmlHistory.appendChild(xmlEvent);
+            writeXml(xmlEvent,"ql:icon", event.icon);
+            writeXml(xmlEvent,"ql:time", event.time);
+            writeXml(xmlEvent,"ql:comment", event.comment);
+
+        }
+    }
+}
+
+
+void IGisProject::readMetadata(const QDomNode& xml, metadata_t& metadata)
+{
+
+    readXml(xml,"name", metadata.name);
+    readXml(xml,"desc", metadata.desc);
+
+    const QDomNode& xmlAuthor = xml.namedItem("author");
+    if(xmlAuthor.isElement())
+    {
+        readXml(xml,"name", metadata.author.name);
+
+        const QDomNode& xmlEmail = xmlAuthor.namedItem("email");
+        if(xmlEmail.isElement())
+        {
+            const QDomNamedNodeMap& attr = xmlEmail.attributes();
+            metadata.author.id = attr.namedItem("id").nodeValue();
+            metadata.author.domain = attr.namedItem("domain").nodeValue();
+        }
+
+        const QDomNode& xmlLink = xmlAuthor.namedItem("link");
+        if(xmlLink.isElement())
+        {
+            metadata.author.link.uri.setUrl(xmlLink.attributes().namedItem("href").nodeValue());
+            readXml(xmlLink, "text", metadata.author.link.text);
+            readXml(xmlLink, "type", metadata.author.link.type);
+        }
+    }
+
+    const QDomNode& xmlCopyright = xml.namedItem("copyright");
+    if(xmlCopyright.isElement())
+    {
+        metadata.copyright.author = xmlCopyright.attributes().namedItem("author").nodeValue();
+        readXml(xmlCopyright, "year", metadata.copyright.year);
+        readXml(xmlCopyright, "license", metadata.copyright.license);
+    }
+
+    readXml(xml,"link", metadata.links);
+    readXml(xml,"time", metadata.time);
+    readXml(xml,"keywords", metadata.keywords);
+
+    const QDomNode& xmlBounds = xml.namedItem("bounds");
+    if(xmlBounds.isElement())
+    {
+        const QDomNamedNodeMap& attr = xmlBounds.attributes();
+        metadata.bounds.setLeft(attr.namedItem("minlon").nodeValue().toDouble());
+        metadata.bounds.setTop(attr.namedItem("maxlat").nodeValue().toDouble());
+        metadata.bounds.setRight(attr.namedItem("maxlon").nodeValue().toDouble());
+        metadata.bounds.setBottom(attr.namedItem("minlat").nodeValue().toDouble());
+    }
+}
+
+QDomNode IGisProject::writeMetadata(QDomDocument& doc)
+{
+    QDomElement gpx = doc.createElement("gpx");
+    doc.appendChild(gpx);
+
+    gpx.setAttribute("version","1.1");
+    gpx.setAttribute("creator","QMapShack " VER_STR " http://www.qlandkarte.org/");
+    gpx.setAttribute("xmlns",gpx_ns);
+    gpx.setAttribute("xmlns:xsi",xsi_ns);
+    gpx.setAttribute("xmlns:gpxx",gpxx_ns);
+    gpx.setAttribute("xmlns:gpxtpx",gpxtpx_ns);
+    gpx.setAttribute("xmlns:wptx1",wptx1_ns);
+    gpx.setAttribute("xmlns:rmc",rmc_ns);
+    gpx.setAttribute("xmlns:ql",ql_ns);
+
+    QString schemaLocation = QString()
+        + gpx_ns    + " http://www.topografix.com/GPX/1/1/gpx.xsd "
+        + gpxx_ns   + " http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd "
+        + gpxtpx_ns + " http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd "
+        + wptx1_ns  + " http://www.garmin.com/xmlschemas/WaypointExtensionv1.xsd"
+        + ql_ns     + " http://www.qlandkarte.org/xmlschemas/v1.1/ql-extensions.xsd";
+
+    gpx.setAttribute("xsi:schemaLocation", schemaLocation);
+
+    QDomElement xmlMetadata = doc.createElement("metadata");
+    gpx.appendChild(xmlMetadata);
+
+    writeXml(xmlMetadata,"name", metadata.name);
+    writeXml(xmlMetadata,"desc", metadata.desc);
+
+    if(!metadata.author.name.isEmpty())
+    {
+        QDomElement xmlAuthor = doc.createElement("author");
+        xmlMetadata.appendChild(xmlAuthor);
+
+        writeXml(xmlAuthor,"name", metadata.author.name);
+
+        if(!metadata.author.id.isEmpty() && !metadata.author.domain.isEmpty())
+        {
+            QDomElement xmlEmail = doc.createElement("email");
+            xmlAuthor.appendChild(xmlEmail);
+            xmlEmail.setAttribute("id", metadata.author.id);
+            xmlEmail.setAttribute("domain", metadata.author.domain);
+        }
+
+        if(metadata.author.link.uri.isValid())
+        {
+            QDomElement xmlLink = doc.createElement("link");
+            xmlAuthor.appendChild(xmlLink);
+
+            xmlLink.setAttribute("href", metadata.author.link.uri.toString());
+            writeXml(xmlLink, "text", metadata.author.link.text);
+            writeXml(xmlLink, "type", metadata.author.link.type);
+
+        }
+    }
+
+    if(!metadata.copyright.author.isEmpty())
+    {
+        QDomElement xmlCopyright = doc.createElement("copyright");
+        xmlMetadata.appendChild(xmlCopyright);
+
+        xmlCopyright.setAttribute("author", metadata.copyright.author);
+        writeXml(xmlCopyright, "year", metadata.copyright.year);
+        writeXml(xmlCopyright, "license", metadata.copyright.license);
+
+    }
+    writeXml(xmlMetadata, "link", metadata.links);
+    writeXml(xmlMetadata, "time", metadata.time);
+    writeXml(xmlMetadata, "keywords", metadata.keywords);
+
+    if(metadata.bounds.isValid())
+    {
+        QDomElement xmlBounds = doc.createElement("bounds");
+        xmlMetadata.appendChild(xmlBounds);
+
+        xmlBounds.setAttribute("minlat", metadata.bounds.bottom());
+        xmlBounds.setAttribute("minlon", metadata.bounds.left());
+        xmlBounds.setAttribute("maxlat", metadata.bounds.top());
+        xmlBounds.setAttribute("maxlon", metadata.bounds.right());
+
+    }
+
+    return gpx;
+}
+
+void CGisItemWpt::readGpx(const QDomNode& xml)
+{
+    readWpt(xml, wpt);
+    // decode some well known extensions
+    if(xml.namedItem("extensions").isElement())
+    {
+        const QDomNode& ext = xml.namedItem("extensions");
+        readXml(ext, "ql:key", key);
+        readXml(ext, "ql:flags", flags);
+        readXml(ext, history);
+
+        const QDomNode& wptx1 = ext.namedItem("wptx1:WaypointExtension");
+        readXml(wptx1, "wptx1:Proximity", proximity);
+
+        const QDomNode& xmlCache = ext.namedItem("cache");
+        if(!xmlCache.isNull())
+        {
+            // read OC cache extensions
+        }
+    }
+
+    const QDomNode& xmlCache = xml.namedItem("groundspeak:cache");
+    if(!xmlCache.isNull() && !geocache.hasData)
+    {
+        readGcExt(xmlCache);
+    }
+}
+
+void CGisItemWpt::save(QDomNode& gpx)
+{
+    QDomDocument doc = gpx.ownerDocument();
+
+    QDomElement xmlWpt = doc.createElement("wpt");
+    gpx.appendChild(xmlWpt);
+    writeWpt(xmlWpt, wpt);
+
+    // write the key as extension tag
+    QDomElement xmlExt  = doc.createElement("extensions");
+    xmlWpt.appendChild(xmlExt);
+    writeXml(xmlExt, "ql:key", key);
+    writeXml(xmlExt, "ql:flags", flags);
+    writeXml(xmlExt, history);
+
+    // write other well known extensions
+    QDomElement wptx1  = doc.createElement("wptx1:WaypointExtension");
+    xmlExt.appendChild(wptx1);
+    writeXml(wptx1, "wptx1:Proximity", proximity);
+
+    if(geocache.hasData && geocache.service == eGC)
+    {
+        QDomElement xmlCache = doc.createElement("groundspeak:cache");
+        writeGcExt(xmlCache);
+        xmlWpt.appendChild(xmlCache);
+    }
+}
+
+void CGisItemWpt::readGcExt(const QDomNode& xmlCache)
+{
+    geocache.service = eGC;
+    const QDomNamedNodeMap& attr = xmlCache.attributes();
+    geocache.id = attr.namedItem("id").nodeValue().toInt();
+
+    geocache.archived   = attr.namedItem("archived").nodeValue().toLocal8Bit() == "True";
+    geocache.available  = attr.namedItem("available").nodeValue().toLocal8Bit() == "True";
+    if(geocache.archived)
+    {
+        geocache.status = QObject::tr("Archived");
+    }
+    else if(geocache.available)
+    {
+        geocache.status = QObject::tr("Available");
+    }
+    else
+    {
+        geocache.status = QObject::tr("Not Available");
+    }
+
+    readXml(xmlCache, "groundspeak:name", geocache.name);
+    readXml(xmlCache, "groundspeak:placed_by", geocache.owner);
+    readXml(xmlCache, "groundspeak:type", geocache.type);
+    readXml(xmlCache, "groundspeak:container", geocache.container);
+    readXml(xmlCache, "groundspeak:difficulty", geocache.difficulty);
+    readXml(xmlCache, "groundspeak:terrain", geocache.terrain);
+    readXml(xmlCache, "groundspeak:short_description", geocache.shortDesc, geocache.shortDescIsHtml);
+    readXml(xmlCache, "groundspeak:long_description", geocache.longDesc, geocache.longDescIsHtml);
+    readXml(xmlCache, "groundspeak:encoded_hints", geocache.hint);
+    readXml(xmlCache, "groundspeak:country", geocache.country);
+    readXml(xmlCache, "groundspeak:state", geocache.state);
+
+    const QDomNodeList& logs = xmlCache.toElement().elementsByTagName("groundspeak:log");
+    uint N = logs.count();
+
+    for(uint n = 0; n < N; ++n)
+    {
+        const QDomNode& xmlLog = logs.item(n);
+        const QDomNamedNodeMap& attr = xmlLog.attributes();
+
+        geocachelog_t log;
+        log.id = attr.namedItem("id").nodeValue().toUInt();
+        readXml(xmlLog, "groundspeak:date", log.date);
+        readXml(xmlLog, "groundspeak:type", log.type);
+        if(xmlLog.namedItem("groundspeak:finder").isElement())
+        {
+            const QDomNamedNodeMap& attr = xmlLog.namedItem("groundspeak:finder").attributes();
+            log.finderId = attr.namedItem("id").nodeValue();
+        }
+
+        readXml(xmlLog, "groundspeak:finder", log.finder);
+        readXml(xmlLog, "groundspeak:text", log.text, log.textIsHtml);
+
+        geocache.logs << log;
+
+    }
+    geocache.hasData = true;
+}
+
+void CGisItemWpt::writeGcExt(QDomNode& xmlCache)
+{
+    QString str;
+    xmlCache.toElement().setAttribute("xmlns:groundspeak", "http://www.groundspeak.com/cache/1/0");
+    xmlCache.toElement().setAttribute("id", geocache.id);
+    xmlCache.toElement().setAttribute("archived", geocache.archived ? "True" : "False");
+    xmlCache.toElement().setAttribute("available", geocache.available ? "True" : "False");
+
+    writeXml(xmlCache, "groundspeak:name", geocache.name);
+    writeXml(xmlCache, "groundspeak:placed_by", geocache.owner);
+    writeXml(xmlCache, "groundspeak:type", geocache.type);
+    writeXml(xmlCache, "groundspeak:container", geocache.container);
+
+    if(geocache.difficulty == int(geocache.difficulty))
+    {
+        str.sprintf("%1.0f", geocache.difficulty);
+    }
+    else
+    {
+        str.sprintf("%1.1f", geocache.difficulty);
+    }
+    writeXml(xmlCache, "groundspeak:difficulty", str);
+
+    if(geocache.terrain == int(geocache.terrain))
+    {
+        str.sprintf("%1.0f", geocache.terrain);
+    }
+    else
+    {
+        str.sprintf("%1.1f", geocache.terrain);
+    }
+    writeXml(xmlCache, "groundspeak:terrain", str);
+    writeXml(xmlCache, "groundspeak:short_description", geocache.shortDesc, geocache.shortDescIsHtml);
+    writeXml(xmlCache, "groundspeak:long_description", geocache.longDesc, geocache.longDescIsHtml);
+    writeXml(xmlCache, "groundspeak:encoded_hints", geocache.hint);
+
+    if(!geocache.logs.isEmpty())
+    {
+        QDomElement xmlLogs = xmlCache.ownerDocument().createElement("groundspeak:logs");
+        xmlCache.appendChild(xmlLogs);
+
+        foreach(const geocachelog_t& log, geocache.logs)
+        {
+            QDomElement xmlLog = xmlCache.ownerDocument().createElement("groundspeak:log");
+            xmlLogs.appendChild(xmlLog);
+
+            xmlLog.setAttribute("id", log.id);
+            writeXml(xmlLog, "groundspeak:date", log.date);
+            writeXml(xmlLog, "groundspeak:type", log.type);
+
+            QDomElement xmlFinder = xmlCache.ownerDocument().createElement("groundspeak:finder");
+            xmlLog.appendChild(xmlFinder);
+
+            QDomText _finder_ = xmlCache.ownerDocument().createCDATASection(log.finder);
+            xmlFinder.appendChild(_finder_);
+            xmlFinder.setAttribute("id", log.finderId);
+
+            writeXml(xmlLog, "groundspeak:text", log.text, log.textIsHtml);
+        }
+    }
+}
+
+
+void CGisItemTrk::readTrk(const QDomNode& xml, trk_t& trk)
+{
+    readXml(xml, "name", trk.name);
+    readXml(xml, "cmt", trk.cmt);
+    readXml(xml, "desc", trk.desc);
+    readXml(xml, "src", trk.src);
+    readXml(xml, "link", trk.links);
+    readXml(xml, "number", trk.number);
+    readXml(xml, "type", trk.type);
+
+    const QDomNodeList& trksegs = xml.toElement().elementsByTagName("trkseg");
+    int N = trksegs.count();
+    trk.segs.resize(N);
+    for(int n = 0; n < N; ++n)
+    {
+        const QDomNode& trkseg = trksegs.item(n);
+        trkseg_t& seg = trk.segs[n];
+
+        const QDomNodeList& xmlTrkpts = trkseg.toElement().elementsByTagName("trkpt");
+        int M = xmlTrkpts.count();
+        seg.pts.resize(M);
+        for(int m = 0; m < M; ++m)
+        {
+            trkpt_t& trkpt = seg.pts[m];
+            const QDomNode& xmlTrkpt = xmlTrkpts.item(m);
+            readWpt(xmlTrkpt, trkpt);
+
+            const QDomNode& ext = xmlTrkpt.namedItem("extensions");
+            if(ext.isElement())
+            {
+                readXml(ext, "ql:flags", trkpt.flags);
+            }
+        }
+    }
+
+    // decode some well known extensions
+    const QDomNode& ext = xml.namedItem("extensions");
+    if(ext.isElement())
+    {
+        readXml(ext, "ql:key", key);
+        readXml(ext, "ql:flags", flags);
+        readXml(ext, history);
+
+        const QDomNode& gpxx = ext.namedItem("gpxx:TrackExtension");
+        readXml(gpxx, "gpxx:DisplayColor", trk.color);
+        setColor(str2color(trk.color));
+    }
+
+    deriveSecondaryData();
+}
+
+void CGisItemTrk::save(QDomNode& gpx)
+{
+
+    QDomDocument doc = gpx.ownerDocument();
+
+    QDomElement xmlTrk = doc.createElement("trk");
+    gpx.appendChild(xmlTrk);
+
+    writeXml(xmlTrk, "name", trk.name);
+    writeXml(xmlTrk, "cmt", trk.cmt);
+    writeXml(xmlTrk, "desc", trk.desc);
+    writeXml(xmlTrk, "src", trk.src);
+    writeXml(xmlTrk, "link", trk.links);
+    writeXml(xmlTrk, "number", trk.number);
+    writeXml(xmlTrk, "type", trk.type);
+
+    // write the key as extension tag
+    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", trk.color);
+
+    foreach(const trkseg_t& seg, trk.segs)
+    {
+        QDomElement xmlTrkseg = doc.createElement("trkseg");
+        xmlTrk.appendChild(xmlTrkseg);
+
+        foreach(const trkpt_t& pt, seg.pts)
+        {
+            QDomElement xmlTrkpt = doc.createElement("trkpt");
+            xmlTrkseg.appendChild(xmlTrkpt);
+            writeWpt(xmlTrkpt, pt);
+
+            QDomElement xmlExt  = doc.createElement("extensions");
+            xmlTrkpt.appendChild(xmlExt);
+            writeXml(xmlExt, "ql:flags", pt.flags);
+        }
+    }
+}
+
+void CGisItemRte::readRte(const QDomNode& xml, rte_t& rte)
+{
+    qreal north = -90;
+    qreal east  = -180;
+    qreal south =  90;
+    qreal west  =  180;
+
+    readXml(xml, "name", rte.name);
+    readXml(xml, "cmt", rte.cmt);
+    readXml(xml, "desc", rte.desc);
+    readXml(xml, "src", rte.src);
+    readXml(xml, "link", rte.links);
+    readXml(xml, "number", rte.number);
+    readXml(xml, "type", rte.type);
+
+    const QDomNodeList& xmlRtepts = xml.toElement().elementsByTagName("rtept");
+    int M = xmlRtepts.count();
+    rte.pts.resize(M);
+    for(int m = 0; m < M; ++m)
+    {
+        rtept_t& rtept = rte.pts[m];
+        const QDomNode& xmlRtept = xmlRtepts.item(m);
+        readWpt(xmlRtept, rtept);
+        rtept.icon = getWptIconByName(rtept.sym, rtept.focus);
+
+        if(rtept.lon < west)  west    = rtept.lon;
+        if(rtept.lon > east)  east    = rtept.lon;
+        if(rtept.lat < south) south   = rtept.lat;
+        if(rtept.lat > north) north   = rtept.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
+    if(xml.namedItem("extensions").isElement())
+    {
+        const QDomNode& ext = xml.namedItem("extensions");
+        readXml(ext, "ql:key", key);
+    }
+}
+
+
+void CGisItemRte::save(QDomNode& gpx)
+{
+    QDomDocument doc = gpx.ownerDocument();
+
+    QDomElement xmlRte = doc.createElement("rte");
+    gpx.appendChild(xmlRte);
+
+    writeXml(xmlRte, "name", rte.name);
+    writeXml(xmlRte, "cmt", rte.cmt);
+    writeXml(xmlRte, "desc", rte.desc);
+    writeXml(xmlRte, "src", rte.src);
+    writeXml(xmlRte, "link", rte.links);
+    writeXml(xmlRte, "number", rte.number);
+    writeXml(xmlRte, "type", rte.type);
+
+    // write the key as extension tag
+    QDomElement xmlExt  = doc.createElement("extensions");
+    xmlRte.appendChild(xmlExt);
+    writeXml(xmlExt, "ql:key", key);
+
+    foreach(const rtept_t& pt, rte.pts)
+    {
+        QDomElement xmlRtept = doc.createElement("rtept");
+        xmlRte.appendChild(xmlRtept);
+        writeWpt(xmlRtept, pt);
+    }
+
+}
+
+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);
+    }
+}
+
+void IGisItem::readWpt(const QDomNode& xml, wpt_t& wpt)
+{
+    const QDomNamedNodeMap& attr = xml.attributes();
+    wpt.lat = attr.namedItem("lat").nodeValue().toDouble();
+    wpt.lon = attr.namedItem("lon").nodeValue().toDouble();
+
+    readXml(xml, "ele", wpt.ele);
+    readXml(xml, "time", wpt.time);
+    readXml(xml, "magvar", wpt.magvar);
+    readXml(xml, "geoidheight", wpt.geoidheight);
+    readXml(xml, "name", wpt.name);
+    readXml(xml, "cmt", wpt.cmt);
+    readXml(xml, "desc", wpt.desc);
+    readXml(xml, "src", wpt.src);
+    readXml(xml, "link", wpt.links);
+    readXml(xml, "sym", wpt.sym);
+    readXml(xml, "type", wpt.type);
+    readXml(xml, "fix", wpt.fix);
+    readXml(xml, "sat", wpt.sat);
+    readXml(xml, "hdop", wpt.hdop);
+    readXml(xml, "vdop", wpt.vdop);
+    readXml(xml, "pdop", wpt.pdop);
+    readXml(xml, "ageofdgpsdata", wpt.ageofdgpsdata);
+    readXml(xml, "dgpsid", wpt.dgpsid);
+
+    // some GPX 1.0 backward compatibility
+    QString url;
+    readXml(xml, "url", url);
+    if(!url.isEmpty())
+    {
+        link_t link;
+        link.uri.setUrl(url);
+        readXml(xml, "urlname", link.text);
+
+        wpt.links << link;
+    }
+
+}
+
+
+void IGisItem::writeWpt(QDomElement& xml, const wpt_t& wpt)
+{
+    QString str;
+
+    str.sprintf("%1.8f", wpt.lat);
+    xml.setAttribute("lat",str);
+    str.sprintf("%1.8f", wpt.lon);
+    xml.setAttribute("lon",str);
+
+    writeXml(xml, "ele", wpt.ele);
+    writeXml(xml, "time", wpt.time);
+    writeXml(xml, "magvar", wpt.magvar);
+    writeXml(xml, "geoidheight", wpt.geoidheight);
+    writeXml(xml, "name", wpt.name);
+    writeXml(xml, "cmt", wpt.cmt);
+    writeXml(xml, "desc", wpt.desc);
+    writeXml(xml, "src", wpt.src);
+    writeXml(xml, "link", wpt.links);
+    writeXml(xml, "sym", wpt.sym);
+    writeXml(xml, "type", wpt.type);
+    writeXml(xml, "fix", wpt.fix);
+    writeXml(xml, "sat", wpt.sat);
+    writeXml(xml, "hdop", wpt.hdop);
+    writeXml(xml, "vdop", wpt.vdop);
+    writeXml(xml, "pdop", wpt.pdop);
+    writeXml(xml, "ageofdgpsdata", wpt.ageofdgpsdata);
+    writeXml(xml, "dgpsid", wpt.dgpsid);
+
+}
diff --git a/src/gis/ovl/CDetailsOvlArea.cpp b/src/gis/ovl/CDetailsOvlArea.cpp
index c7b1d20..678a4aa 100644
--- a/src/gis/ovl/CDetailsOvlArea.cpp
+++ b/src/gis/ovl/CDetailsOvlArea.cpp
@@ -27,6 +27,7 @@
 CDetailsOvlArea::CDetailsOvlArea(CGisItemOvlArea &area, QWidget * parent)
     : QDialog(parent)
     , area(area)
+    , originator(false)
 {
     setupUi(this);
 
@@ -63,6 +64,8 @@ CDetailsOvlArea::CDetailsOvlArea(CGisItemOvlArea &area, QWidget * parent)
     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)));
+
+    connect(listHistory, SIGNAL(sigChanged()), this, SLOT(setupGui()));
 }
 
 CDetailsOvlArea::~CDetailsOvlArea()
@@ -73,7 +76,7 @@ CDetailsOvlArea::~CDetailsOvlArea()
 
 void CDetailsOvlArea::slotSetColor(int idx)
 {
-    if(area.isReadOnly())
+    if(area.isReadOnly() || originator)
     {
         return;
     }
@@ -84,7 +87,7 @@ void CDetailsOvlArea::slotSetColor(int idx)
 
 void CDetailsOvlArea::slotSetWidth(int idx)
 {
-    if(area.isReadOnly())
+    if(area.isReadOnly() || originator)
     {
         return;
     }
@@ -94,7 +97,7 @@ void CDetailsOvlArea::slotSetWidth(int idx)
 
 void CDetailsOvlArea::slotSetStyle(int idx)
 {
-    if(area.isReadOnly())
+    if(area.isReadOnly() || originator)
     {
         return;
     }
@@ -105,7 +108,7 @@ void CDetailsOvlArea::slotSetStyle(int idx)
 
 void CDetailsOvlArea::slotOpyacity(bool yes)
 {
-    if(area.isReadOnly())
+    if(area.isReadOnly() || originator)
     {
         return;
     }
@@ -177,6 +180,12 @@ QString CDetailsOvlArea::toLink(bool isReadOnly, const QString& href, const QStr
 
 void CDetailsOvlArea::setupGui()
 {
+    if(originator)
+    {
+        return;
+    }
+    originator = true;
+
     bool isReadOnly = area.isReadOnly();
     setWindowTitle(area.getName());
 
@@ -189,16 +198,6 @@ void CDetailsOvlArea::setupGui()
         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()));
 
@@ -264,6 +263,10 @@ void CDetailsOvlArea::setupGui()
     treeWidget->addTopLevelItems(items);
     treeWidget->header()->resizeSections(QHeaderView::ResizeToContents);
 
+    toolLock->setChecked(isReadOnly);
+
+    listHistory->setupHistory(area);
 
+    originator = false;
 }
 
diff --git a/src/gis/ovl/CDetailsOvlArea.h b/src/gis/ovl/CDetailsOvlArea.h
index 7df4b31..923ae6d 100644
--- a/src/gis/ovl/CDetailsOvlArea.h
+++ b/src/gis/ovl/CDetailsOvlArea.h
@@ -39,10 +39,9 @@ class CDetailsOvlArea : public QDialog, private Ui::IDetailsOvlArea
         void slotChangeReadOnlyMode(bool on);
         void slotLinkActivated(const QUrl& url);
         void slotLinkActivated(const QString& link);
-
-
-    private:
         void setupGui();
+
+    private:        
         enum columns_t
         {
             eColNum
@@ -53,6 +52,8 @@ class CDetailsOvlArea : public QDialog, private Ui::IDetailsOvlArea
         QString toLink(bool isReadOnly, const QString& href, const QString& str);
 
         CGisItemOvlArea& area;
+
+        bool originator;
 };
 
 #endif //CDETAILSOVLAREA_H
diff --git a/src/gis/ovl/CGisItemOvlArea.cpp b/src/gis/ovl/CGisItemOvlArea.cpp
index 232c8e3..8cada8e 100644
--- a/src/gis/ovl/CGisItemOvlArea.cpp
+++ b/src/gis/ovl/CGisItemOvlArea.cpp
@@ -128,6 +128,7 @@ CGisItemOvlArea::CGisItemOvlArea(const QPolygonF& line, const QString &name, IGi
     setToolTip(0, getInfo());
     genKey();
     project->setText(1,"*");
+    setupHistory();
 }
 
 CGisItemOvlArea::CGisItemOvlArea(const CGisItemOvlArea& parentArea, IGisProject * project, int idx)
@@ -143,6 +144,7 @@ CGisItemOvlArea::CGisItemOvlArea(const CGisItemOvlArea& parentArea, IGisProject
     key.clear();
     genKey();
     project->setText(1,"*");
+    setupHistory();
 }
 
 CGisItemOvlArea::CGisItemOvlArea(const QDomNode &xml, IGisProject *project)
@@ -157,9 +159,20 @@ CGisItemOvlArea::CGisItemOvlArea(const QDomNode &xml, IGisProject *project)
     setText(0, area.name);
     setToolTip(0, getInfo());
     genKey();
+    setupHistory();
+}
 
+CGisItemOvlArea::CGisItemOvlArea(const history_t& hist, IGisProject * 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)
+{
+    history = hist;
+    loadHistory(hist.histIdxCurrent);
 }
 
+
+
 CGisItemOvlArea::~CGisItemOvlArea()
 {
     // reset user focus if focused on this track
@@ -167,7 +180,6 @@ CGisItemOvlArea::~CGisItemOvlArea()
     {
         keyUserFocus.clear();
     }
-
 }
 
 void CGisItemOvlArea::genKey()
@@ -233,74 +245,6 @@ void CGisItemOvlArea::readLine(const QPolygonF &line)
     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()
 {
@@ -348,6 +292,7 @@ void CGisItemOvlArea::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF
 
     gis->convertRad2Px(line);
 
+    p.save();
     p.setOpacity(area.opacity ? 0.3 : 1.0);
 
     penBackground.setWidth(area.width + 2);
@@ -360,7 +305,7 @@ void CGisItemOvlArea::drawItem(QPainter& p, const QRectF& viewport, QList<QRectF
     p.setBrush(QBrush(color, (Qt::BrushStyle)area.style));
     p.setPen(penForeground);
     p.drawPolygon(line);
-
+    p.restore();
 }
 
 void CGisItemOvlArea::drawLabel(QPainter& p, const QRectF& viewport,QList<QRectF>& blockedAreas, const QFontMetricsF& fm, CGisDraw * gis)
@@ -465,7 +410,7 @@ QString CGisItemOvlArea::getInfo()
     return str;
 }
 
-void CGisItemOvlArea::getData(QPolygonF& line)
+void CGisItemOvlArea::getPolylineFromData(QPolygonF& line)
 {    
     line.clear();
     foreach(const pt_t& pt, area.pts)
@@ -474,7 +419,7 @@ void CGisItemOvlArea::getData(QPolygonF& line)
     }
 }
 
-void CGisItemOvlArea::setData(const QPolygonF& line)
+void CGisItemOvlArea::setDataFromPolyline(const QPolygonF& line)
 {
     readLine(line);
 
@@ -482,44 +427,44 @@ void CGisItemOvlArea::setData(const QPolygonF& line)
     setText(1,"*");
     setToolTip(0, getInfo());
     parent()->setText(1,"*");
-    changed(QObject::tr("Changed area shape."));
+    changed(QObject::tr("Changed area shape."), "://icons/48x48/AreaMove.png");
 }
 
 void CGisItemOvlArea::setName(const QString& str)
 {
     setText(0, str);
     area.name = str;
-    changed(QObject::tr("Changed name."));
+    changed(QObject::tr("Changed name."), "://icons/48x48/EditText.png");
 }
 
 void CGisItemOvlArea::setWidth(qint32 w)
 {
     area.width = w;
-    changed(QObject::tr("Changed border width."));
+    changed(QObject::tr("Changed border width."), "://icons/48x48/TextBold.png");
 }
 
 void CGisItemOvlArea::setStyle(qint32 s)
 {
     area.style = s;
-    changed(QObject::tr("Changed fill pattern."));
+    changed(QObject::tr("Changed fill pattern."), "://icons/48x48/Pattern.png");
 }
 
 void CGisItemOvlArea::setOpacity(bool yes)
 {
     area.opacity = yes;
-    changed(QObject::tr("Changed opacity."));
+    changed(QObject::tr("Changed opacity."), "://icons/48x48/Opacity.png");
 }
 
 void CGisItemOvlArea::setComment(const QString& str)
 {
     area.cmt = str;
-    changed(QObject::tr("Changed comment."));
+    changed(QObject::tr("Changed comment."), "://icons/48x48/EditText.png");
 }
 
 void CGisItemOvlArea::setDescription(const QString& str)
 {
     area.desc = str;
-    changed(QObject::tr("Changed description."));
+    changed(QObject::tr("Changed description."), "://icons/48x48/EditText.png");
 }
 
 
@@ -531,7 +476,7 @@ void CGisItemOvlArea::setColor(int idx)
         return;
     }
     setColor(lineColors[idx]);
-    changed(QObject::tr("Changed color"));
+    changed(QObject::tr("Changed color"), "://icons/48x48/SelectColor.png");
 }
 
 void CGisItemOvlArea::setColor(const QColor& c)
diff --git a/src/gis/ovl/CGisItemOvlArea.h b/src/gis/ovl/CGisItemOvlArea.h
index 3eeae31..34c8996 100644
--- a/src/gis/ovl/CGisItemOvlArea.h
+++ b/src/gis/ovl/CGisItemOvlArea.h
@@ -38,12 +38,16 @@ class CGisItemOvlArea : public IGisItem, public IGisLine
         CGisItemOvlArea(const QPolygonF& line, const QString &name, IGisProject * project, int idx);
         CGisItemOvlArea(const CGisItemOvlArea &parentArea, IGisProject * project, int idx);
         CGisItemOvlArea(const QDomNode &xml, IGisProject *project);
+        CGisItemOvlArea(const history_t& hist, IGisProject * project);
         virtual ~CGisItemOvlArea();
 
+        QDataStream& operator<<(QDataStream& stream);
+        QDataStream& operator>>(QDataStream& stream);
+
         const QString& getName();
         int getColorIdx(){return colorIdx;}
         QString getInfo();
-        void getData(QPolygonF& line);
+        void getPolylineFromData(QPolygonF& line);
         const QString& getComment(){return area.cmt;}
         const QString& getDescription(){return area.desc;}
         const QList<link_t>& getLinks(){return area.links;}
@@ -54,7 +58,7 @@ class CGisItemOvlArea : public IGisItem, public IGisLine
 
         void setName(const QString& str);
         void setColor(int idx);
-        void setData(const QPolygonF& line);
+        void setDataFromPolyline(const QPolygonF& line);
         void setWidth(qint32 w);
         void setStyle(qint32 s);
         void setOpacity(bool yes);
diff --git a/src/gis/ovl/IDetailsOvlArea.ui b/src/gis/ovl/IDetailsOvlArea.ui
index 62731d1..7a5b710 100644
--- a/src/gis/ovl/IDetailsOvlArea.ui
+++ b/src/gis/ovl/IDetailsOvlArea.ui
@@ -231,7 +231,7 @@
         <number>0</number>
        </property>
        <item>
-        <widget class="QTextBrowser" name="textHistory"/>
+        <widget class="CHistoryListWidget" name="listHistory"/>
        </item>
       </layout>
      </widget>
@@ -239,6 +239,13 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>CHistoryListWidget</class>
+   <extends>QListWidget</extends>
+   <header>helpers/CHistoryListWidget.h</header>
+  </customwidget>
+ </customwidgets>
  <resources>
   <include location="../../resources.qrc"/>
  </resources>
diff --git a/src/gis/rte/CGisItemRte.cpp b/src/gis/rte/CGisItemRte.cpp
index b5e9941..25f4865 100644
--- a/src/gis/rte/CGisItemRte.cpp
+++ b/src/gis/rte/CGisItemRte.cpp
@@ -48,6 +48,7 @@ CGisItemRte::CGisItemRte(const CGisItemRte& parentRte, IGisProject * project, in
     genKey();
 
     project->setText(1,"*");
+    setupHistory();
 }
 
 /// used to create route from GPX file
@@ -63,9 +64,19 @@ CGisItemRte::CGisItemRte(const QDomNode& xml, IGisProject *parent)
     setIcon(0, icon);
     setToolTip(0,getInfo());
     genKey();
+    setupHistory();
+}
+
+CGisItemRte::CGisItemRte(const history_t& hist, IGisProject * project)
+    : IGisItem(project, eTypeRte, project->childCount())
+    , penForeground(Qt::magenta, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+{
+    history = hist;
+    loadHistory(hist.histIdxCurrent);
 }
 
 
+
 CGisItemRte::~CGisItemRte()
 {
 
@@ -112,77 +123,6 @@ QPointF CGisItemRte::getPointCloseBy(const QPoint& screenPos)
     return pt;
 }
 
-void CGisItemRte::readRte(const QDomNode& xml, rte_t& rte)
-{
-    qreal north = -90;
-    qreal east  = -180;
-    qreal south =  90;
-    qreal west  =  180;
-
-    readXml(xml, "name", rte.name);
-    readXml(xml, "cmt", rte.cmt);
-    readXml(xml, "desc", rte.desc);
-    readXml(xml, "src", rte.src);
-    readXml(xml, "link", rte.links);
-    readXml(xml, "number", rte.number);
-    readXml(xml, "type", rte.type);
-
-    const QDomNodeList& xmlRtepts = xml.toElement().elementsByTagName("rtept");
-    int M = xmlRtepts.count();
-    rte.pts.resize(M);
-    for(int m = 0; m < M; ++m)
-    {
-        rtept_t& rtept = rte.pts[m];
-        const QDomNode& xmlRtept = xmlRtepts.item(m);
-        readWpt(xmlRtept, rtept);
-        rtept.icon = getWptIconByName(rtept.sym, rtept.focus);
-
-        if(rtept.lon < west)  west    = rtept.lon;
-        if(rtept.lon > east)  east    = rtept.lon;
-        if(rtept.lat < south) south   = rtept.lat;
-        if(rtept.lat > north) north   = rtept.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
-    if(xml.namedItem("extensions").isElement())
-    {
-        const QDomNode& ext = xml.namedItem("extensions");
-        readXml(ext, "ql:key", key);
-    }
-}
-
-
-void CGisItemRte::save(QDomNode& gpx)
-{
-    QDomDocument doc = gpx.ownerDocument();
-
-    QDomElement xmlRte = doc.createElement("rte");
-    gpx.appendChild(xmlRte);
-
-    writeXml(xmlRte, "name", rte.name);
-    writeXml(xmlRte, "cmt", rte.cmt);
-    writeXml(xmlRte, "desc", rte.desc);
-    writeXml(xmlRte, "src", rte.src);
-    writeXml(xmlRte, "link", rte.links);
-    writeXml(xmlRte, "number", rte.number);
-    writeXml(xmlRte, "type", rte.type);
-
-    // write the key as extension tag
-    QDomElement xmlExt  = doc.createElement("extensions");
-    xmlRte.appendChild(xmlExt);
-    writeXml(xmlExt, "ql:key", key);
-
-    foreach(const rtept_t& pt, rte.pts)
-    {
-        QDomElement xmlRtept = doc.createElement("rtept");
-        xmlRte.appendChild(xmlRtept);
-        writeWpt(xmlRtept, pt);
-    }
-
-}
 
 
 bool CGisItemRte::isCloseTo(const QPointF& pos)
diff --git a/src/gis/rte/CGisItemRte.h b/src/gis/rte/CGisItemRte.h
index 3d8597c..5b615fa 100644
--- a/src/gis/rte/CGisItemRte.h
+++ b/src/gis/rte/CGisItemRte.h
@@ -32,8 +32,11 @@ class CGisItemRte : public IGisItem, public IGisLine
     public:
         CGisItemRte(const QDomNode &xml, IGisProject *parent);
         CGisItemRte(const CGisItemRte& parentRte, IGisProject *project, int idx);
+        CGisItemRte(const history_t& hist, IGisProject * project);
         virtual ~CGisItemRte();
 
+        QDataStream& operator<<(QDataStream& stream);
+        QDataStream& operator>>(QDataStream& stream);
 
         const QString& getName(){return rte.name;}
         QString getInfo();
@@ -46,8 +49,8 @@ class CGisItemRte : public IGisItem, public IGisLine
         bool isCloseTo(const QPointF& pos);
         void gainUserFocus(bool yes);
 
-        void setData(const QPolygonF& line){}
-        void getData(QPolygonF& line){}
+        void setDataFromPolyline(const QPolygonF& line){}
+        void getPolylineFromData(QPolygonF& line){}
 
     private:
         struct rte_t;
diff --git a/src/gis/search/CSearchGoogle.cpp b/src/gis/search/CSearchGoogle.cpp
index f604e49..d644a21 100644
--- a/src/gis/search/CSearchGoogle.cpp
+++ b/src/gis/search/CSearchGoogle.cpp
@@ -30,7 +30,7 @@
 #include <QtXml>
 
 CSearchGoogle::CSearchGoogle(CGisListWks * parent)
-    : IGisProject("",parent)
+    : IGisProject("","", parent)
 {
     QPointF focus;
 
diff --git a/src/gis/search/CSearchGoogle.h b/src/gis/search/CSearchGoogle.h
index e920e93..49f9396 100644
--- a/src/gis/search/CSearchGoogle.h
+++ b/src/gis/search/CSearchGoogle.h
@@ -34,6 +34,9 @@ class CSearchGoogle : public QObject, public IGisProject
         CSearchGoogle(CGisListWks * parent);
         virtual ~CSearchGoogle();
 
+        void save(){}
+        void saveAs(){}
+
     private slots:
         void slotChangeSymbol();
         void slotStartSearch();
diff --git a/src/gis/trk/CCombineTrk.cpp b/src/gis/trk/CCombineTrk.cpp
index 5419718..ecbc535 100644
--- a/src/gis/trk/CCombineTrk.cpp
+++ b/src/gis/trk/CCombineTrk.cpp
@@ -195,7 +195,7 @@ void CCombineTrk::updatePreview()
             continue;
         }
         QPolygonF line1;
-        trk1->getData(line1);
+        trk1->getPolylineFromData(line1);
 
         line += line1;
     }
diff --git a/src/gis/trk/CDetailsTrk.cpp b/src/gis/trk/CDetailsTrk.cpp
index ecc0a61..23fa56a 100644
--- a/src/gis/trk/CDetailsTrk.cpp
+++ b/src/gis/trk/CDetailsTrk.cpp
@@ -28,9 +28,9 @@
 CDetailsTrk::CDetailsTrk(CGisItemTrk& trk, QWidget *parent)
     : QWidget(parent)
     , trk(trk)
+    , originator(false)
 {
-    setupUi(this);
-    setupGui();
+    setupUi(this);    
 
     QPixmap icon(16,8);
     for(int i=0; i < TRK_N_COLORS; ++i)
@@ -39,19 +39,14 @@ CDetailsTrk::CDetailsTrk(CGisItemTrk& trk, QWidget *parent)
         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);
+    setupGui();
 
     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());
+    splitter->restoreState(cfg.value("splitterSizes").toByteArray());
     cfg.endGroup();
 
     connect(checkProfile, SIGNAL(clicked()), this, SLOT(slotShowPlots()));
@@ -64,6 +59,8 @@ CDetailsTrk::CDetailsTrk(CGisItemTrk& trk, QWidget *parent)
     connect(treeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(slotItemSelectionChanged()));
     connect(textCmtDesc, SIGNAL(anchorClicked(QUrl)), this, SLOT(slotLinkActivated(QUrl)));
 
+    connect(listHistory, SIGNAL(sigChanged()), this, SLOT(setupGui()));
+
     slotShowPlots();
 
 }
@@ -75,6 +72,7 @@ CDetailsTrk::~CDetailsTrk()
     cfg.setValue("showProfile", checkProfile->isChecked());
     cfg.setValue("showSpeed", checkSpeed->isChecked());
     cfg.setValue("showProgress", checkProgress->isChecked());
+    cfg.setValue("splitterSizes", splitter->saveState());
     cfg.endGroup();
 }
 
@@ -90,9 +88,15 @@ QString CDetailsTrk::toLink(bool isReadOnly, const QString& href, const QString&
 
 
 void CDetailsTrk::setupGui()
-{
-    QString str, val, unit;
+{    
+    if(originator)
+    {
+        return;
+    }
+    QApplication::setOverrideCursor(Qt::WaitCursor);
+    originator = true;
 
+    QString str, val, unit;
     bool isReadOnly = trk.isReadOnly();
 
     if(trk.isTainted())
@@ -105,7 +109,8 @@ void CDetailsTrk::setupGui()
     }
 
     labelInfo->setText(trk.getInfo());
-    lineName->setEnabled(!isReadOnly);
+    lineName->setEnabled(!isReadOnly);    
+    comboColor->setCurrentIndex(trk.getColorIdx());
     comboColor->setEnabled(!isReadOnly);
     toolLock->setChecked(isReadOnly);
 
@@ -208,6 +213,8 @@ void CDetailsTrk::setupGui()
     treeWidget->addTopLevelItems(items);
     treeWidget->header()->resizeSections(QHeaderView::ResizeToContents);
 
+    lineName->setText(trk.getName());
+
     textCmtDesc->document()->clear();
 
     foreach(const IGisItem::link_t& link, trk.getLinks())
@@ -238,15 +245,15 @@ void CDetailsTrk::setupGui()
     textCmtDesc->moveCursor (QTextCursor::Start) ;
     textCmtDesc->ensureCursorVisible() ;
 
+    plotElevation->setTrack(&trk);
+    plotDistance->setTrack(&trk);
+    plotSpeed->setTrack(&trk);
+    plotTrack->setTrack(&trk);
 
-    if(!trk.getHistory().isEmpty())
-    {
-        textHistory->clear();
-        foreach(const QString& entry, trk.getHistory())
-        {
-            textHistory->append(entry);
-        }
-    }
+    listHistory->setupHistory(trk);
+
+    originator = false;
+    QApplication::restoreOverrideCursor();
 }
 
 void CDetailsTrk::setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt)
@@ -310,7 +317,6 @@ void CDetailsTrk::slotColorChanged(int idx)
     {
         trk.setColor(idx);
     }
-    setupGui();
 }
 
 void CDetailsTrk::slotChangeReadOnlyMode(bool on)
@@ -349,7 +355,6 @@ void CDetailsTrk::slotNameChanged()
     }
 
     lineName->setPalette(palette);
-    setupGui();
 }
 
 void CDetailsTrk::slotItemSelectionChanged()
@@ -372,8 +377,6 @@ void CDetailsTrk::slotLinkActivated(const QUrl& url)
         {
             trk.setComment(dlg.getHtml());
         }
-        setupGui();
-
     }
     else if(url.toString() == "description")
     {
@@ -383,7 +386,6 @@ void CDetailsTrk::slotLinkActivated(const QUrl& url)
         {
             trk.setDescription(dlg.getHtml());
         }
-        setupGui();
     }
     else
     {
diff --git a/src/gis/trk/CDetailsTrk.h b/src/gis/trk/CDetailsTrk.h
index 5f15f25..f793ce2 100644
--- a/src/gis/trk/CDetailsTrk.h
+++ b/src/gis/trk/CDetailsTrk.h
@@ -34,6 +34,9 @@ class CDetailsTrk : public QWidget, private Ui::IDetailsTrk
         void setMouseMoveFocus(const CGisItemTrk::trkpt_t * pt);
         void setMouseClickFocus(const CGisItemTrk::trkpt_t * pt);
 
+    public slots:
+        void setupGui();
+
     private slots:
         void slotShowPlots();
         void slotColorChanged(int idx);
@@ -45,7 +48,7 @@ class CDetailsTrk : public QWidget, private Ui::IDetailsTrk
 
     private:
         QString toLink(bool isReadOnly, const QString& href, const QString& str);
-        void setupGui();
+
 
         enum columns_t
         {
@@ -69,6 +72,8 @@ class CDetailsTrk : public QWidget, private Ui::IDetailsTrk
            track item will destroy this object on it's own destruction.
         */
         CGisItemTrk& trk;
+
+        bool originator;
 };
 
 #endif //CDETAILSTRK_H
diff --git a/src/gis/trk/CGisItemTrk.cpp b/src/gis/trk/CGisItemTrk.cpp
index da62be4..031c5fe 100644
--- a/src/gis/trk/CGisItemTrk.cpp
+++ b/src/gis/trk/CGisItemTrk.cpp
@@ -102,7 +102,7 @@ const QPen CGisItemTrk::penBackground(Qt::white, 5, Qt::SolidLine, Qt::RoundCap,
 QString CGisItemTrk::keyUserFocus;
 
 /// used to create a new track from a part of an existing track
-CGisItemTrk::CGisItemTrk(const QString &name, quint32 idx1, quint32 idx2, const trk_t& srctrk, IGisProject * project)
+CGisItemTrk::CGisItemTrk(const QString &name, qint32 idx1, qint32 idx2, const trk_t& srctrk, IGisProject * project)
     : IGisItem(project, eTypeTrk, -1)
     , penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
     , drawMode(eDrawNormal)
@@ -151,6 +151,7 @@ CGisItemTrk::CGisItemTrk(const QString &name, quint32 idx1, quint32 idx2, const
     genKey();
 
     project->setText(1,"*");
+    setupHistory();
 }
 
 /// used to create a copy of track with new parent
@@ -169,6 +170,7 @@ CGisItemTrk::CGisItemTrk(const CGisItemTrk& parentTrk, IGisProject *project, int
     key.clear();
     genKey();
     project->setText(1,"*");
+    setupHistory();
 }
 
 /// usd to create a track from a line of coordinates
@@ -180,7 +182,7 @@ CGisItemTrk::CGisItemTrk(const QPolygonF& l, const QString& name, IGisProject *
     , mouseClickFocus(0)
 {
     trk.name = name;
-    readLine(l);
+    readTrackDataFromPolyLine(l);
 
     flags |=  eFlagCreatedInQms|eFlagWriteAllowed;
 
@@ -190,6 +192,7 @@ CGisItemTrk::CGisItemTrk(const QPolygonF& l, const QString& name, IGisProject *
     setToolTip(0, getInfo());
     genKey();
     project->setText(1,"*");
+    setupHistory();
 }
 
 /// used to create track from GPX file
@@ -208,20 +211,22 @@ CGisItemTrk::CGisItemTrk(const QDomNode& xml, IGisProject *project)
     setToolTip(0, getInfo());
     genKey();
 
-//    QFile file(trk.name + ".dat");
-//    file.open(QIODevice::WriteOnly);
-//    QDataStream stream(&file);
-//    *this >> stream;
-//    file.close();
-
-//    if(file.open(QIODevice::ReadOnly))
-//    {
-//        QDataStream stream(&file);
-//        *this << stream;
-//        file.close();
-//    }
+    setupHistory();
 }
 
+CGisItemTrk::CGisItemTrk(const history_t& hist, IGisProject * project)
+    : IGisItem(project, eTypeTrk, project->childCount())
+    , penForeground(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)
+    , drawMode(eDrawNormal)
+    , mouseMoveFocus(0)
+    , mouseClickFocus(0)
+{
+    history = hist;
+    loadHistory(hist.histIdxCurrent);
+}
+
+
+
 CGisItemTrk::~CGisItemTrk()
 {
     // reset user focus if focused on this track
@@ -242,7 +247,7 @@ CGisItemTrk::~CGisItemTrk()
 }
 
 
-void CGisItemTrk::setData(const QPolygonF &l)
+void CGisItemTrk::setDataFromPolyline(const QPolygonF &l)
 {
     /*
         as this will change the line significantly we better stop
@@ -252,16 +257,16 @@ void CGisItemTrk::setData(const QPolygonF &l)
     mouseMoveFocus  = 0;
     delete dlgDetails;
 
-    readLine(l);
+    readTrackDataFromPolyLine(l);
 
     flags |= eFlagTainted;
     setText(1,"*");
     setToolTip(0, getInfo());
     parent()->setText(1,"*");    
-    changed(QObject::tr("Changed trackpoints, sacrificed all previous data."));
+    changed(QObject::tr("Changed trackpoints, sacrificed all previous data."), "://icons/48x48/LineMove.png");
 }
 
-void CGisItemTrk::getData(QPolygonF &l)
+void CGisItemTrk::getPolylineFromData(QPolygonF &l)
 {
     l.clear();
     foreach (const trkseg_t& seg, trk.segs)
@@ -278,7 +283,7 @@ void CGisItemTrk::getData(QPolygonF &l)
 
 }
 
-void CGisItemTrk::readLine(const QPolygonF &l)
+void CGisItemTrk::readTrackDataFromPolyLine(const QPolygonF &l)
 {
     trk.segs.clear();
     trk.segs.resize(1);
@@ -541,108 +546,6 @@ QPointF CGisItemTrk::getPointCloseBy(const QPoint& screenPos)
     return lineSimple[idx];
 }
 
-void CGisItemTrk::readTrk(const QDomNode& xml, trk_t& trk)
-{
-    readXml(xml, "name", trk.name);
-    readXml(xml, "cmt", trk.cmt);
-    readXml(xml, "desc", trk.desc);
-    readXml(xml, "src", trk.src);
-    readXml(xml, "link", trk.links);
-    readXml(xml, "number", trk.number);
-    readXml(xml, "type", trk.type);
-
-    const QDomNodeList& trksegs = xml.toElement().elementsByTagName("trkseg");
-    int N = trksegs.count();
-    trk.segs.resize(N);
-    for(int n = 0; n < N; ++n)
-    {
-        const QDomNode& trkseg = trksegs.item(n);
-        trkseg_t& seg = trk.segs[n];
-
-        const QDomNodeList& xmlTrkpts = trkseg.toElement().elementsByTagName("trkpt");
-        int M = xmlTrkpts.count();
-        seg.pts.resize(M);
-        for(int m = 0; m < M; ++m)
-        {
-            trkpt_t& trkpt = seg.pts[m];
-            const QDomNode& xmlTrkpt = xmlTrkpts.item(m);
-            readWpt(xmlTrkpt, trkpt);
-
-            trkpt.shdwLon   = trkpt.lon;
-            trkpt.shdwLat   = trkpt.lat;
-            trkpt.shdwEle   = trkpt.ele;
-            trkpt.shdwTime  = trkpt.time;
-
-            const QDomNode& ext = xmlTrkpt.namedItem("extensions");
-            if(ext.isElement())
-            {
-                readXml(ext, "ql:flags", trkpt.flags);
-            }
-        }
-    }
-
-    // decode some well known extensions
-    const QDomNode& ext = xml.namedItem("extensions");
-    if(ext.isElement())
-    {
-        readXml(ext, "ql:key", key);
-        readXml(ext, "ql:flags", flags);
-        readXml(ext, history);
-
-        const QDomNode& gpxx = ext.namedItem("gpxx:TrackExtension");
-        readXml(gpxx, "gpxx:DisplayColor", trk.color);
-        setColor(str2color(trk.color));
-    }
-
-    deriveSecondaryData();
-}
-
-void CGisItemTrk::save(QDomNode& gpx)
-{
-
-    QDomDocument doc = gpx.ownerDocument();
-
-    QDomElement xmlTrk = doc.createElement("trk");
-    gpx.appendChild(xmlTrk);
-
-    writeXml(xmlTrk, "name", trk.name);
-    writeXml(xmlTrk, "cmt", trk.cmt);
-    writeXml(xmlTrk, "desc", trk.desc);
-    writeXml(xmlTrk, "src", trk.src);
-    writeXml(xmlTrk, "link", trk.links);
-    writeXml(xmlTrk, "number", trk.number);
-    writeXml(xmlTrk, "type", trk.type);
-
-    // write the key as extension tag
-    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", trk.color);
-
-    foreach(const trkseg_t& seg, trk.segs)
-    {
-        QDomElement xmlTrkseg = doc.createElement("trkseg");
-        xmlTrk.appendChild(xmlTrkseg);
-
-        foreach(const trkpt_t& pt, seg.pts)
-        {
-            QDomElement xmlTrkpt = doc.createElement("trkpt");
-            xmlTrkseg.appendChild(xmlTrkpt);
-            writeWpt(xmlTrkpt, pt);
-
-            QDomElement xmlExt  = doc.createElement("extensions");
-            xmlTrkpt.appendChild(xmlExt);
-            writeXml(xmlExt, "ql:flags", pt.flags);
-        }
-    }
-    setText(1, "");
-}
 
 
 void CGisItemTrk::deriveSecondaryData()
@@ -1025,14 +928,26 @@ void CGisItemTrk::hideSelectedPoints()
         return;
     }
 
-    quint32 idx1 = mouseClickFocus->idxTotal;
-    quint32 idx2 = mouseMoveFocus->idxTotal;
-
+    // read start/stop indices
+    qint32 idx1 = mouseClickFocus->idxTotal;
+    qint32 idx2 = mouseMoveFocus->idxTotal;
     if(idx1 > idx2)
     {
         qSwap(idx1,idx2);
     }
 
+    // if first index is the first point adjust index to hide it, too
+    if(idx1 == 0)
+    {
+        idx1 = -1;
+    }
+    // if second index is the last point adjust index to hide it, too
+    if(idx2 == cntTotalPoints - 1)
+    {
+        idx2 = cntTotalPoints;
+    }
+
+    // iterate over all segments and delete points between idx1 and idx2
     for(int s = 0; s < trk.segs.size(); s++)
     {
         trkseg_t& seg = trk.segs[s];
@@ -1048,10 +963,8 @@ void CGisItemTrk::hideSelectedPoints()
     }
     mouseClickFocus = 0;
     mouseMoveFocus  = 0;
-    deriveSecondaryData();
-    setToolTip(0, getInfo());
-    setText(1,"*");
-    parent()->setText(1,"*");
+    deriveSecondaryData();    
+    changed(QObject::tr("Hide points."), "://icons/48x48/PointHide.png");
 }
 
 void CGisItemTrk::showSelectedPoints()
@@ -1061,8 +974,8 @@ void CGisItemTrk::showSelectedPoints()
         return;
     }
 
-    quint32 idx1 = mouseClickFocus->idxTotal;
-    quint32 idx2 = mouseMoveFocus->idxTotal;
+    qint32 idx1 = mouseClickFocus->idxTotal;
+    qint32 idx2 = mouseMoveFocus->idxTotal;
 
     if(idx1 > idx2)
     {
@@ -1085,9 +998,7 @@ void CGisItemTrk::showSelectedPoints()
     mouseClickFocus = 0;
     mouseMoveFocus  = 0;
     deriveSecondaryData();
-    setToolTip(0, getInfo());
-    setText(1,"*");
-    parent()->setText(1,"*");
+    changed(QObject::tr("Show points."), "://icons/48x48/PointShow.png");
 }
 
 void CGisItemTrk::copySelectedPoints()
@@ -1375,19 +1286,19 @@ void CGisItemTrk::setName(const QString& str)
 {
     setText(0, str);
     trk.name = str;
-    changed(QObject::tr("Changed name"));
+    changed(QObject::tr("Changed name"), "://icons/48x48/EditText.png");
 }
 
 void CGisItemTrk::setComment(const QString& str)
 {
     trk.cmt = str;
-    changed(QObject::tr("Changed comment"));
+    changed(QObject::tr("Changed comment"), "://icons/48x48/EditText.png");
 }
 
 void CGisItemTrk::setDescription(const QString& str)
 {
     trk.desc = str;
-    changed(QObject::tr("Changed description"));
+    changed(QObject::tr("Changed description"), "://icons/48x48/EditText.png");
 }
 
 void CGisItemTrk::setColor(int idx)
@@ -1398,7 +1309,7 @@ void CGisItemTrk::setColor(int idx)
         return;
     }
     setColor(lineColors[idx]);
-    changed(QObject::tr("Changed color"));
+    changed(QObject::tr("Changed color"), "://icons/48x48/SelectColor.png");
 }
 
 void CGisItemTrk::setColor(const QColor& c)
@@ -1556,7 +1467,7 @@ QPointF CGisItemTrk::setMouseFocusByPoint(const QPoint& pt, focusmode_e mode)
 }
 
 
-void CGisItemTrk::setMouseFocusByIndex(quint32 idx, focusmode_e mode)
+void CGisItemTrk::setMouseFocusByIndex(qint32 idx, focusmode_e mode)
 {
     const trkpt_t * newPointOfFocus = 0;
 
@@ -1632,3 +1543,12 @@ void CGisItemTrk::publishMouseFocus(const trkpt_t * pt, focusmode_e mode,  IPlot
         default:;
     }
 }
+
+void CGisItemTrk::changed(const QString& what, const QString& icon)
+{
+    IGisItem::changed(what, icon);
+    if(!dlgDetails.isNull())
+    {
+        dlgDetails->setupGui();
+    }
+}
diff --git a/src/gis/trk/CGisItemTrk.h b/src/gis/trk/CGisItemTrk.h
index 1eb5980..e12c45c 100644
--- a/src/gis/trk/CGisItemTrk.h
+++ b/src/gis/trk/CGisItemTrk.h
@@ -51,29 +51,14 @@ class CGisItemTrk : public IGisItem, public IGisLine
             , eDrawRange
         };
 
-        CGisItemTrk(const QString& name, quint32 idx1, quint32 idx2, const trk_t &srctrk, IGisProject *project);
+        CGisItemTrk(const QString& name, qint32 idx1, qint32 idx2, const trk_t &srctrk, IGisProject *project);
         CGisItemTrk(const CGisItemTrk& parentTrk, IGisProject * project, int idx);
         CGisItemTrk(const QPolygonF& l, const QString &name, IGisProject *project, int idx);
         CGisItemTrk(const QDomNode &xml, IGisProject *project);
+        CGisItemTrk(const history_t& hist, IGisProject * project);
         virtual ~CGisItemTrk();
 
-        /**
-           @brief Serialize object out of a QDataStream
-
-           See CGisSerialization.cpp for implementation
-
-           @param stream the binary data stream
-           @return The stream object.
-        */
         QDataStream& operator<<(QDataStream& stream);
-        /**
-           @brief Serialize object into a QDataStream
-
-           See CGisSerialization.cpp for implementation
-
-           @param stream the binary data stream
-           @return The stream object.
-        */
         QDataStream& operator>>(QDataStream& stream);
 
         const QString& getName(){return trk.name;}
@@ -86,13 +71,14 @@ class CGisItemTrk : public IGisItem, public IGisLine
         const QString& getComment(){return trk.cmt;}
         const QString& getDescription(){return trk.desc;}
         const QList<link_t>& getLinks(){return trk.links;}
+        void getPolylineFromData(QPolygonF& l);
 
         void setName(const QString& str);
         void setColor(int idx);
         void setDrawMode(drawmode_e mode){drawMode = mode;}
         void setComment(const QString& str);
         void setDescription(const QString& str);
-
+        void setDataFromPolyline(const QPolygonF& l);
 
         IScrOpt * getScreenOptions(const QPoint &origin, IMouse * mouse);
         QPointF getPointCloseBy(const QPoint& screenPos);
@@ -105,8 +91,6 @@ class CGisItemTrk : public IGisItem, public IGisLine
         void drawRange(QPainter& p);
         void save(QDomNode& gpx);
 
-        void setData(const QPolygonF& l);
-        void getData(QPolygonF& l);
 
         /**
            @brief Switch user focus on and off.
@@ -229,21 +213,68 @@ class CGisItemTrk : public IGisItem, public IGisLine
            @brief Use point with given index counter
            @param idx
         */
-        void setMouseFocusByIndex(quint32 idx, focusmode_e mode);
+        void setMouseFocusByIndex(qint32 idx, focusmode_e mode);
 
         static const QColor  lineColors[TRK_N_COLORS];
         static const QString bulletColors[TRK_N_COLORS];
 
     private:        
-
         void genKey();
+        /**
+           @brief Read track data from section in GPX file
+           @param xml   The XML <trk> section
+           @param trk   The track structure to fill
+        */
         void readTrk(const QDomNode& xml, trk_t& trk);
-        void setColor(const QColor& c);
-        void setIcon(const QString& c);
+        /**
+           @brief Derive secondary data from the track data
+
+           This has to be called each time the track data is changed.
+        */
         void deriveSecondaryData();
+        /**
+           @brief Try to get access Nth visible point matching the idx
+
+           This will iterate over all segments and count the visible points. If the
+           count matches idx a pointer to the track point is passed
+
+           @param idx The index into all visible points
+           @return A null pointer of no point is found.
+        */
         const trkpt_t *getVisibleTrkPtByIndex(quint32 idx);
+
+        /**
+           @brief Tell the point of focus to all plots and the detail dialog
+
+           @param pt        A pointer to the point itself
+           @param mode      The reason for the focus
+           @param initiator A pointer to an IPlot object that has set the point of focus. Can be 0.
+        */
         void publishMouseFocus(const trkpt_t * pt, focusmode_e mode, IPlot *initiator);
-        void readLine(const QPolygonF &l);        
+        /**
+           @brief Replace all trackpoints by the coordinates stored in the polyline
+
+           The DEM layer will be queried for elevation data. All other data is lost.
+
+           @param l     A polyline with coordinates [rad]
+         */
+        void readTrackDataFromPolyLine(const QPolygonF &l);
+        /**
+           @brief Overide IGisItem::changed() method
+
+           As the CDetailsTrk is no modal dialog that blocks the GUI from any other input the track
+           can be changed while the widget is visible. Therfore it needs some feedback to update the
+           CDetailsTrk widget. Usualy this would be a signal. However CGisItemTrk is a QTreeWidgetItem
+           and therefor no QObject. Fortunately there the dlgDetails pointer. So CDetailsTrk::setupGui()
+           can be called from changed()
+
+           @param what  The reason string
+           @param icon  An icon string
+        */
+        void changed(const QString& what, const QString& icon);
+
+        void setColor(const QColor& c);
+        void setIcon(const QString& c);
 
     public:
         struct trkpt_t : public wpt_t
@@ -272,20 +303,10 @@ class CGisItemTrk : public IGisItem, public IGisLine
 
             quint32 flags;
             /// index within the complete track
-            quint32 idxTotal;
+            qint32  idxTotal;
             /// offset into lineSimple
             qint32  idxVisible;
 
-            /// shadow latitude
-            qreal shdwLat;
-            /// shadow longitude
-            qreal shdwLon;
-            /// shadow elevation
-            qint32 shdwEle;
-            /// shadow timestamp
-            QDateTime shdwTime;
-
-
             /// the distance to the last point
             qreal deltaDistance;
             /// the distance from the start of the track
@@ -330,6 +351,10 @@ class CGisItemTrk : public IGisItem, public IGisLine
             QString color;
         };
 
+        /**
+           @brief Read only access to the track data.
+           @return
+        */
         const trk_t& getTrackData() const{return trk;}
 
     private:
@@ -342,8 +367,8 @@ class CGisItemTrk : public IGisItem, public IGisLine
 
         drawmode_e drawMode;
 
-        quint32     cntTotalPoints;
-        quint32     cntVisiblePoints;
+        qint32      cntTotalPoints;
+        qint32      cntVisiblePoints;
         QDateTime   timeStart;
         QDateTime   timeEnd;
         qreal       totalDistance;
diff --git a/src/gis/trk/IDetailsTrk.ui b/src/gis/trk/IDetailsTrk.ui
index 2db7506..f6551c0 100644
--- a/src/gis/trk/IDetailsTrk.ui
+++ b/src/gis/trk/IDetailsTrk.ui
@@ -13,259 +13,84 @@
   <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <layout class="QVBoxLayout" name="verticalLayout_5">
    <property name="spacing">
-    <number>0</number>
+    <number>3</number>
    </property>
    <property name="leftMargin">
-    <number>0</number>
+    <number>3</number>
    </property>
    <property name="topMargin">
-    <number>0</number>
+    <number>3</number>
    </property>
    <property name="rightMargin">
-    <number>0</number>
+    <number>3</number>
    </property>
    <property name="bottomMargin">
-    <number>0</number>
+    <number>3</number>
    </property>
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_3">
-     <property name="spacing">
-      <number>3</number>
+    <widget class="QSplitter" name="splitter">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
      </property>
-     <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_2"/>
-   </item>
-   <item>
-    <widget class="QTabWidget" name="tabWidget">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
-       <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_5">
+     <widget class="QWidget" name="layoutWidget">
+      <layout class="QVBoxLayout" name="verticalLayout">
        <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="CPlotTrack" name="plotTrack" native="true"/>
-       </item>
-       <item>
-        <layout class="QVBoxLayout" name="verticalLayout_2">
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
+         <property name="spacing">
+          <number>3</number>
+         </property>
          <item>
-          <layout class="QHBoxLayout" name="horizontalLayout">
-           <item>
-            <widget class="QComboBox" name="comboColor"/>
-           </item>
-           <item>
-            <widget class="QLineEdit" name="lineName"/>
-           </item>
-          </layout>
+          <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>
-          <layout class="QHBoxLayout" name="horizontalLayout_4">
-           <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>
-           <item>
-            <widget class="QLabel" name="labelTainted">
-             <property name="maximumSize">
-              <size>
-               <width>25</width>
-               <height>25</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="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>
-            <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>
-          </layout>
+          <widget class="Line" name="line">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+          </widget>
          </item>
          <item>
-          <widget class="QLabel" name="labelInfo">
-           <property name="text">
-            <string>-</string>
+          <widget class="QLabel" name="labelInfoProgress">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
            </property>
-           <property name="alignment">
-            <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+           <property name="text">
+            <string>-
+-</string>
            </property>
           </widget>
          </item>
          <item>
-          <spacer name="verticalSpacer">
+          <spacer name="horizontalSpacer">
            <property name="orientation">
-            <enum>Qt::Vertical</enum>
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeType">
+            <enum>QSizePolicy::Expanding</enum>
            </property>
            <property name="sizeHint" stdset="0">
             <size>
-             <width>20</width>
-             <height>40</height>
+             <width>40</width>
+             <height>20</height>
             </size>
            </property>
           </spacer>
@@ -273,131 +98,327 @@
         </layout>
        </item>
        <item>
-        <widget class="QTextBrowser" name="textCmtDesc"/>
+        <widget class="CPlotProfile" name="plotElevation" native="true">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>0</width>
+           <height>100</height>
+          </size>
+         </property>
+        </widget>
        </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab">
-      <attribute name="title">
-       <string>Points</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_4">
-       <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">
+        <widget class="CPlotSpeed" name="plotSpeed" native="true">
          <property name="sizePolicy">
-          <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+          <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <property name="alternatingRowColors">
-          <bool>true</bool>
+         <property name="minimumSize">
+          <size>
+           <width>0</width>
+           <height>100</height>
+          </size>
          </property>
-         <property name="rootIsDecorated">
-          <bool>false</bool>
+        </widget>
+       </item>
+       <item>
+        <widget class="CPlotDistance" name="plotDistance" native="true">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
          </property>
-         <property name="itemsExpandable">
-          <bool>false</bool>
+         <property name="minimumSize">
+          <size>
+           <width>0</width>
+           <height>100</height>
+          </size>
          </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>
      </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 class="QTabWidget" name="tabWidget">
+      <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_5">
+        <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="CPlotTrack" name="plotTrack" native="true"/>
+        </item>
+        <item>
+         <layout class="QVBoxLayout" name="verticalLayout_2">
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout">
+            <item>
+             <widget class="QComboBox" name="comboColor"/>
+            </item>
+            <item>
+             <widget class="QLineEdit" name="lineName"/>
+            </item>
+           </layout>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_4">
+            <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>
+            <item>
+             <widget class="QLabel" name="labelTainted">
+              <property name="maximumSize">
+               <size>
+                <width>25</width>
+                <height>25</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="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>
+             <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>
+           </layout>
+          </item>
+          <item>
+           <widget class="QLabel" name="labelInfo">
+            <property name="text">
+             <string>-</string>
+            </property>
+            <property name="alignment">
+             <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <spacer name="verticalSpacer">
+            <property name="orientation">
+             <enum>Qt::Vertical</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>20</width>
+              <height>40</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <widget class="QTextBrowser" name="textCmtDesc"/>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tab">
+       <attribute name="title">
+        <string>Points</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_4">
+        <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">
+          <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>
+      </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="CHistoryListWidget" name="listHistory"/>
+        </item>
+       </layout>
+      </widget>
      </widget>
     </widget>
    </item>
@@ -428,6 +449,11 @@
    <header>plot/CPlotTrack.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>CHistoryListWidget</class>
+   <extends>QListWidget</extends>
+   <header>helpers/CHistoryListWidget.h</header>
+  </customwidget>
  </customwidgets>
  <resources>
   <include location="../../resources.qrc"/>
diff --git a/src/gis/wpt/CDetailsWpt.cpp b/src/gis/wpt/CDetailsWpt.cpp
index 84e8d25..633e5bf 100644
--- a/src/gis/wpt/CDetailsWpt.cpp
+++ b/src/gis/wpt/CDetailsWpt.cpp
@@ -24,6 +24,7 @@
 #include "helpers/CPositionDialog.h"
 #include "helpers/CWptIconDialog.h"
 #include "helpers/CTextEditWidget.h"
+#include "helpers/CElevationDialog.h"
 
 
 #include <QtWidgets>
@@ -32,6 +33,7 @@
 CDetailsWpt::CDetailsWpt(CGisItemWpt &wpt, QWidget *parent)
     : QDialog(parent)
     , wpt(wpt)
+    , originator(false)
 {
     setupUi(this);
     setupGui();
@@ -42,6 +44,8 @@ CDetailsWpt::CDetailsWpt(CGisItemWpt &wpt, QWidget *parent)
     connect(textCmtDesc, SIGNAL(anchorClicked(QUrl)), this, SLOT(slotLinkActivated(QUrl)));
     connect(toolIcon, SIGNAL(clicked()), this, SLOT(slotChangeIcon()));
     connect(toolLock, SIGNAL(toggled(bool)), this, SLOT(slotChangeReadOnlyMode(bool)));
+
+    connect(listHistory, SIGNAL(sigChanged()), this, SLOT(setupGui()));
 }
 
 CDetailsWpt::~CDetailsWpt()
@@ -61,6 +65,12 @@ QString CDetailsWpt::toLink(bool isReadOnly, const QString& href, const QString&
 
 void CDetailsWpt::setupGui()
 {
+    if(originator)
+    {
+        return;
+    }
+    originator = true;
+
     setWindowTitle(wpt.getName());
 
     QString val, unit;
@@ -139,24 +149,11 @@ void CDetailsWpt::setupGui()
     textCmtDesc->moveCursor (QTextCursor::Start) ;
     textCmtDesc->ensureCursorVisible() ;
 
+    toolLock->setChecked(isReadOnly);
 
+    listHistory->setupHistory(wpt);
 
-    if(!wpt.getHistory().isEmpty())
-    {
-        textHistory->clear();
-        foreach(const QString& entry, wpt.getHistory())
-        {
-            textHistory->append(entry);
-        }
-        textHistory->show();
-    }
-    else
-    {
-        textHistory->hide();
-    }
-
-
-    toolLock->setChecked(isReadOnly);
+    originator = false;
 }
 
 void CDetailsWpt::slotLinkActivated(const QString& link)
@@ -173,7 +170,7 @@ void CDetailsWpt::slotLinkActivated(const QString& link)
     else if(link == "elevation")
     {
         QVariant var(wpt.getElevation());
-        CInputDialog dlg(0, tr("Enter new elevation."), var, QVariant(NOINT));
+        CElevationDialog dlg(0, var, QVariant(NOINT), wpt.getPosition());
         if(dlg.exec() == QDialog::Accepted)
         {
             wpt.setElevation(var.toInt());
diff --git a/src/gis/wpt/CDetailsWpt.h b/src/gis/wpt/CDetailsWpt.h
index d895041..0963673 100644
--- a/src/gis/wpt/CDetailsWpt.h
+++ b/src/gis/wpt/CDetailsWpt.h
@@ -36,11 +36,13 @@ class CDetailsWpt : public QDialog, private Ui::IDetailsWpt
         void slotLinkActivated(const QUrl& url);
         void slotChangeIcon();
         void slotChangeReadOnlyMode(bool on);
-
-    private:
         void setupGui();
+
+    private:        
         QString toLink(bool isReadOnly, const QString& href, const QString& str);
         CGisItemWpt& wpt;
+
+        bool originator;
 };
 
 #endif //CDETAILSWPT_H
diff --git a/src/gis/wpt/CGisItemWpt.cpp b/src/gis/wpt/CGisItemWpt.cpp
index 18e63e9..dcbc45c 100644
--- a/src/gis/wpt/CGisItemWpt.cpp
+++ b/src/gis/wpt/CGisItemWpt.cpp
@@ -65,6 +65,7 @@ CGisItemWpt::CGisItemWpt(const QPointF& pos, const QString& name, const QString
     genKey();
 
     project->setText(1,"*");
+    setupHistory();
 }
 
 /// used to move a copy of waypoint
@@ -92,6 +93,7 @@ CGisItemWpt::CGisItemWpt(const QPointF& pos, const CGisItemWpt& parentWpt, IGisP
     genKey();
 
     project->setText(1,"*");
+    setupHistory();
 }
 
 /// used to create a copy of waypoint with new parent
@@ -110,6 +112,7 @@ CGisItemWpt::CGisItemWpt(const CGisItemWpt &parentWpt, IGisProject *project, int
     genKey();
 
     project->setText(1,"*");
+    setupHistory();
 }
 
 /// used to create waypoint from GPX file
@@ -118,40 +121,26 @@ CGisItemWpt::CGisItemWpt(const QDomNode &xml, IGisProject *project)
     , proximity(NOFLOAT)
     , posScreen(NOPOINTF)
 {
-    // --- start read and process data ----
-    readWpt(xml, wpt);
-    // decode some well known extensions
-    if(xml.namedItem("extensions").isElement())
-    {        
-        const QDomNode& ext = xml.namedItem("extensions");
-        readXml(ext, "ql:key", key);
-        readXml(ext, "ql:flags", flags);
-        readXml(ext, history);
-
-        const QDomNode& wptx1 = ext.namedItem("wptx1:WaypointExtension");
-        readXml(wptx1, "wptx1:Proximity", proximity);
-
-        const QDomNode& xmlCache = ext.namedItem("cache");
-        if(!xmlCache.isNull())
-        {
-            // read OC cache extensions
-        }
-    }
-
-    const QDomNode& xmlCache = xml.namedItem("groundspeak:cache");
-    if(!xmlCache.isNull() && !geocache.hasData)
-    {
-        readGcExt(xmlCache);
-    }
-    // --- stop read and process data ----
-
+    readGpx(xml);
     boundingRect = QRectF(QPointF(wpt.lon,wpt.lat)*DEG_TO_RAD,QPointF(wpt.lon,wpt.lat)*DEG_TO_RAD);
     setText(0, wpt.name);
     setIcon();
     setToolTip(0, getInfo());
     genKey();
+    setupHistory();
 }
 
+CGisItemWpt::CGisItemWpt(const history_t& hist, IGisProject * project)
+    : IGisItem(project, eTypeWpt, project->childCount())
+    , proximity(NOFLOAT)
+    , posScreen(NOPOINTF)
+{
+    history = hist;
+    loadHistory(hist.histIdxCurrent);
+    boundingRect = QRectF(QPointF(wpt.lon,wpt.lat)*DEG_TO_RAD,QPointF(wpt.lon,wpt.lat)*DEG_TO_RAD);    
+}
+
+
 CGisItemWpt::~CGisItemWpt()
 {
 
@@ -310,26 +299,26 @@ void CGisItemWpt::setName(const QString& str)
     setText(0, str);
     lastName = str;
     wpt.name = str;
-    changed(QObject::tr("Changed name"));
+    changed(QObject::tr("Changed name"),"://icons/48x48/EditText.png");
 }
 
 void CGisItemWpt::setPosition(const QPointF& pos)
 {
     wpt.lon = pos.x();
     wpt.lat = pos.y();
-    changed(QObject::tr("Changed position"));
+    changed(QObject::tr("Changed position"),"://icons/48x48/WptMove.png");
 }
 
 void CGisItemWpt::setElevation(qint32 val)
 {
     wpt.ele = val;
-    changed(QObject::tr("Changed elevation"));
+    changed(QObject::tr("Changed elevation"),"://icons/48x48/SetEle.png");
 }
 
 void CGisItemWpt::setProximity(qreal val)
 {
     proximity = val;
-    changed(QObject::tr("Changed proximity"));
+    changed(QObject::tr("Changed proximity"),"://icons/48x48/WptProx.png");
 }
 
 void CGisItemWpt::setIcon(const QString& name)
@@ -337,172 +326,28 @@ void CGisItemWpt::setIcon(const QString& name)
     lastIcon = name;
     wpt.sym  = name;
     setIcon();
-    changed(QObject::tr("Changed icon"));
+
+    QPointF focus;
+    QString path;
+    getWptIconByName(name, focus, &path);
+
+    changed(QObject::tr("Changed icon"), path);
 }
 
 void CGisItemWpt::setComment(const QString& str)
 {
     wpt.cmt = str;
-    changed(QObject::tr("Changed comment"));
+    changed(QObject::tr("Changed comment"), "://icons/48x48/EditText.png");
 }
 
 void CGisItemWpt::setDescription(const QString& str)
 {
     wpt.desc = str;
-    changed(QObject::tr("Changed description"));
-}
-
-void CGisItemWpt::save(QDomNode& gpx)
-{
-    QDomDocument doc = gpx.ownerDocument();
-
-    QDomElement xmlWpt = doc.createElement("wpt");
-    gpx.appendChild(xmlWpt);
-    writeWpt(xmlWpt, wpt);
-
-    // write the key as extension tag
-    QDomElement xmlExt  = doc.createElement("extensions");
-    xmlWpt.appendChild(xmlExt);
-    writeXml(xmlExt, "ql:key", key);
-    writeXml(xmlExt, "ql:flags", flags);
-    writeXml(xmlExt, history);
-
-    // write other well known extensions
-    QDomElement wptx1  = doc.createElement("wptx1:WaypointExtension");
-    xmlExt.appendChild(wptx1);
-    writeXml(wptx1, "wptx1:Proximity", proximity);
-
-    if(geocache.hasData && geocache.service == eGC)
-    {
-        QDomElement xmlCache = doc.createElement("groundspeak:cache");
-        writeGcExt(xmlCache);
-        xmlWpt.appendChild(xmlCache);
-    }
-
-    setText(1,"");
-}
-
-void CGisItemWpt::readGcExt(const QDomNode& xmlCache)
-{
-    geocache.service = eGC;
-    const QDomNamedNodeMap& attr = xmlCache.attributes();
-    geocache.id = attr.namedItem("id").nodeValue().toInt();
-
-    geocache.archived   = attr.namedItem("archived").nodeValue().toLocal8Bit() == "True";
-    geocache.available  = attr.namedItem("available").nodeValue().toLocal8Bit() == "True";
-    if(geocache.archived)
-    {
-        geocache.status = QObject::tr("Archived");
-    }
-    else if(geocache.available)
-    {
-        geocache.status = QObject::tr("Available");
-    }
-    else
-    {
-        geocache.status = QObject::tr("Not Available");
-    }
-
-    readXml(xmlCache, "groundspeak:name", geocache.name);
-    readXml(xmlCache, "groundspeak:placed_by", geocache.owner);
-    readXml(xmlCache, "groundspeak:type", geocache.type);
-    readXml(xmlCache, "groundspeak:container", geocache.container);
-    readXml(xmlCache, "groundspeak:difficulty", geocache.difficulty);
-    readXml(xmlCache, "groundspeak:terrain", geocache.terrain);
-    readXml(xmlCache, "groundspeak:short_description", geocache.shortDesc, geocache.shortDescIsHtml);
-    readXml(xmlCache, "groundspeak:long_description", geocache.longDesc, geocache.longDescIsHtml);
-    readXml(xmlCache, "groundspeak:encoded_hints", geocache.hint);
-    readXml(xmlCache, "groundspeak:country", geocache.country);
-    readXml(xmlCache, "groundspeak:state", geocache.state);
-
-    const QDomNodeList& logs = xmlCache.toElement().elementsByTagName("groundspeak:log");
-    uint N = logs.count();
-
-    for(uint n = 0; n < N; ++n)
-    {
-        const QDomNode& xmlLog = logs.item(n);
-        const QDomNamedNodeMap& attr = xmlLog.attributes();
-
-        geocachelog_t log;
-        log.id = attr.namedItem("id").nodeValue().toUInt();
-        readXml(xmlLog, "groundspeak:date", log.date);
-        readXml(xmlLog, "groundspeak:type", log.type);
-        if(xmlLog.namedItem("groundspeak:finder").isElement())
-        {
-            const QDomNamedNodeMap& attr = xmlLog.namedItem("groundspeak:finder").attributes();
-            log.finderId = attr.namedItem("id").nodeValue();
-        }
-
-        readXml(xmlLog, "groundspeak:finder", log.finder);
-        readXml(xmlLog, "groundspeak:text", log.text, log.textIsHtml);
-
-        geocache.logs << log;
-
-    }
-    geocache.hasData = true;
+    changed(QObject::tr("Changed description"), "://icons/48x48/EditText.png");
 }
 
-void CGisItemWpt::writeGcExt(QDomNode& xmlCache)
-{
-    QString str;
-    xmlCache.toElement().setAttribute("xmlns:groundspeak", "http://www.groundspeak.com/cache/1/0");
-    xmlCache.toElement().setAttribute("id", geocache.id);
-    xmlCache.toElement().setAttribute("archived", geocache.archived ? "True" : "False");
-    xmlCache.toElement().setAttribute("available", geocache.available ? "True" : "False");
-
-    writeXml(xmlCache, "groundspeak:name", geocache.name);
-    writeXml(xmlCache, "groundspeak:placed_by", geocache.owner);
-    writeXml(xmlCache, "groundspeak:type", geocache.type);
-    writeXml(xmlCache, "groundspeak:container", geocache.container);
-
-    if(geocache.difficulty == int(geocache.difficulty))
-    {
-        str.sprintf("%1.0f", geocache.difficulty);
-    }
-    else
-    {
-        str.sprintf("%1.1f", geocache.difficulty);
-    }
-    writeXml(xmlCache, "groundspeak:difficulty", str);
-
-    if(geocache.terrain == int(geocache.terrain))
-    {
-        str.sprintf("%1.0f", geocache.terrain);
-    }
-    else
-    {
-        str.sprintf("%1.1f", geocache.terrain);
-    }
-    writeXml(xmlCache, "groundspeak:terrain", str);
-    writeXml(xmlCache, "groundspeak:short_description", geocache.shortDesc, geocache.shortDescIsHtml);
-    writeXml(xmlCache, "groundspeak:long_description", geocache.longDesc, geocache.longDescIsHtml);
-    writeXml(xmlCache, "groundspeak:encoded_hints", geocache.hint);
-
-    if(!geocache.logs.isEmpty())
-    {
-        QDomElement xmlLogs = xmlCache.ownerDocument().createElement("groundspeak:logs");
-        xmlCache.appendChild(xmlLogs);
-
-        foreach(const geocachelog_t& log, geocache.logs)
-        {
-            QDomElement xmlLog = xmlCache.ownerDocument().createElement("groundspeak:log");
-            xmlLogs.appendChild(xmlLog);
-
-            xmlLog.setAttribute("id", log.id);
-            writeXml(xmlLog, "groundspeak:date", log.date);
-            writeXml(xmlLog, "groundspeak:type", log.type);
 
-            QDomElement xmlFinder = xmlCache.ownerDocument().createElement("groundspeak:finder");
-            xmlLog.appendChild(xmlFinder);
 
-            QDomText _finder_ = xmlCache.ownerDocument().createCDATASection(log.finder);
-            xmlFinder.appendChild(_finder_);
-            xmlFinder.setAttribute("id", log.finderId);
-
-            writeXml(xmlLog, "groundspeak:text", log.text, log.textIsHtml);
-        }
-    }
-}
 
 bool CGisItemWpt::isCloseTo(const QPointF& pos)
 {
diff --git a/src/gis/wpt/CGisItemWpt.h b/src/gis/wpt/CGisItemWpt.h
index 591e39a..cc52b7d 100644
--- a/src/gis/wpt/CGisItemWpt.h
+++ b/src/gis/wpt/CGisItemWpt.h
@@ -72,6 +72,15 @@ class CGisItemWpt : public IGisItem
             QList<geocachelog_t> logs;
         };
 
+        struct image_t
+        {
+            QImage  pixmap;
+            qreal   direction;
+            QString info;
+            QString filePath;
+            QString fileName;
+        };
+
         /**
            @brief Create a completely new waypoint
            @param pos       the waypoint's position [°]
@@ -100,8 +109,19 @@ class CGisItemWpt : public IGisItem
            @param project   the project to append with item
          */
         CGisItemWpt(const QDomNode& xml, IGisProject * project);
+
+        /**
+           @brief Create item from list of changes
+           @param hist      the change history
+           @param project   the project to append with item
+        */
+        CGisItemWpt(const history_t& hist, IGisProject * project);
         virtual ~CGisItemWpt();
 
+        void save(QDomNode& gpx);
+        QDataStream& operator<<(QDataStream& stream);
+        QDataStream& operator>>(QDataStream& stream);
+
         void setName(const QString& str);
         void setPosition(const QPointF& pos);
         void setElevation(qint32 val);
@@ -127,8 +147,7 @@ class CGisItemWpt : public IGisItem
 
         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);
-        void save(QDomNode& gpx);
+        void drawHighlight(QPainter& p);        
         bool isCloseTo(const QPointF& pos);
         bool isGeocache(){return geocache.hasData;}
         void gainUserFocus(bool yes);
@@ -141,6 +160,7 @@ class CGisItemWpt : public IGisItem
 
     private:
         void genKey();
+        void readGpx(const QDomNode& xml);
         void setIcon();
         void readGcExt(const QDomNode& xmlCache);
         void writeGcExt(QDomNode& xmlCache);
@@ -154,6 +174,7 @@ class CGisItemWpt : public IGisItem
         wpt_t wpt;
         qreal proximity;
         geocache_t geocache;
+        QList<image_t> images;
 
         QPointF focus;
         QPointF posScreen;
diff --git a/src/gis/wpt/IDetailsWpt.ui b/src/gis/wpt/IDetailsWpt.ui
index 8f7a72f..07261e5 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>378</height>
+    <height>500</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -35,103 +35,20 @@
    </property>
    <item>
     <layout class="QGridLayout" name="gridLayout">
-     <item row="1" column="1">
-      <layout class="QHBoxLayout" name="horizontalLayout_2">
-       <item>
-        <widget class="QLabel" name="label_3">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Position:</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="labelPositon">
-         <property name="text">
-          <string>-</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>Ele.</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="labelElevation">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>-</string>
-         </property>
-        </widget>
-       </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>Proximity:</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLabel" name="labelProximity">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <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>
+     <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>
-      </spacer>
-     </item>
-     <item row="5" column="1">
-      <widget class="QTextBrowser" name="textHistory">
        <property name="frameShape">
         <enum>QFrame::NoFrame</enum>
        </property>
+       <property name="openLinks">
+        <bool>false</bool>
+       </property>
       </widget>
      </item>
      <item row="2" column="1">
@@ -158,29 +75,6 @@
        </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>
@@ -247,6 +141,101 @@
        </item>
       </layout>
      </item>
+     <item row="1" column="1">
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QLabel" name="label_3">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Position:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="labelPositon">
+         <property name="text">
+          <string>-</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>Ele.</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="labelElevation">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>-</string>
+         </property>
+        </widget>
+       </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>Proximity:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="labelProximity">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>-</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item row="4" column="1">
+      <widget class="CHistoryListWidget" name="listHistory"/>
+     </item>
+     <item row="5" 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>
      <item row="0" column="0">
       <widget class="QToolButton" name="toolIcon">
        <property name="text">
@@ -267,6 +256,13 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>CHistoryListWidget</class>
+   <extends>QListWidget</extends>
+   <header>helpers/CHistoryListWidget.h</header>
+  </customwidget>
+ </customwidgets>
  <resources>
   <include location="../../resources.qrc"/>
  </resources>
diff --git a/src/helpers/CElevationDialog.cpp b/src/helpers/CElevationDialog.cpp
new file mode 100644
index 0000000..483ad5b
--- /dev/null
+++ b/src/helpers/CElevationDialog.cpp
@@ -0,0 +1,87 @@
+/**********************************************************************************************
+    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/CElevationDialog.h"
+#include "units/IUnit.h"
+#include "CMainWindow.h"
+
+#include <QtWidgets>
+#include <proj_api.h>
+
+CElevationDialog::CElevationDialog(QWidget * parent, QVariant &val, const QVariant &reset, const QPointF &pos)
+    : QDialog(parent)
+    , val(val)
+    , reset(reset)
+    , pos(pos)
+{
+    setupUi(this);
+
+    QPushButton * pushReset = buttonBox->addButton(QDialogButtonBox::Reset);
+    connect(pushReset, SIGNAL(clicked()), this, SLOT(slotReset()));
+    connect(toolGetEle, SIGNAL(clicked()), this, SLOT(slotGetEle()));
+
+    QString str, unit;
+    IUnit::self().meter2elevation(100, str, unit);
+
+    labelUnit->setText(unit);
+    if(val != reset)
+    {
+        IUnit::self().meter2elevation(val.toDouble(), str, unit);
+        lineValue->setText(str);
+    }
+
+}
+
+CElevationDialog::~CElevationDialog()
+{
+
+}
+
+void CElevationDialog::accept()
+{
+    if(lineValue->text().isEmpty())
+    {
+        val = reset;
+    }
+    else
+    {
+        val.setValue(lineValue->text().toDouble() / IUnit::self().basefactor);
+    }
+
+    QDialog::accept();
+}
+
+void CElevationDialog::slotReset()
+{
+    lineValue->clear();
+}
+
+void CElevationDialog::slotGetEle()
+{
+    QVariant ele = CMainWindow::self().getEelevationAt(pos * DEG_TO_RAD);
+    if(ele != NOFLOAT)
+    {
+        QString str, unit;
+        IUnit::self().meter2elevation(ele.toDouble(), str, unit);
+        lineValue->setText(str);
+    }
+    else
+    {
+        labelMessage->setText(tr("No DEM data found for that point."));
+    }
+}
diff --git a/src/gis/search/CSearchGoogle.h b/src/helpers/CElevationDialog.h
similarity index 63%
copy from src/gis/search/CSearchGoogle.h
copy to src/helpers/CElevationDialog.h
index e920e93..0d3837c 100644
--- a/src/gis/search/CSearchGoogle.h
+++ b/src/helpers/CElevationDialog.h
@@ -16,36 +16,31 @@
 
 **********************************************************************************************/
 
-#ifndef CSEARCHGOOGLE_H
-#define CSEARCHGOOGLE_H
+#ifndef CELEVATIONDIALOG_H
+#define CELEVATIONDIALOG_H
 
-#include <gis/IGisProject.h>
+#include <QDialog>
+#include "ui_IElevationDialog.h"
 
-#include <QObject>
-#include <QNetworkAccessManager>
-
-class CGisListWks;
-class QLineEdit;
-
-class CSearchGoogle : public QObject, public IGisProject
+class CElevationDialog : public QDialog, private Ui::IElevationDialog
 {
     Q_OBJECT
     public:
-        CSearchGoogle(CGisListWks * parent);
-        virtual ~CSearchGoogle();
+        CElevationDialog(QWidget * parent, QVariant &val, const QVariant &reset, const QPointF& pos);
+        virtual ~CElevationDialog();
 
-    private slots:
-        void slotChangeSymbol();
-        void slotStartSearch();
-        void slotRequestFinished(QNetworkReply* reply);
+    public slots:
+        void accept();
 
+    private slots:
+        void slotReset();
+        void slotGetEle();
     private:
-        QLineEdit * edit;
-
-        QAction * actSymbol;
+        QVariant& val;
+        QVariant reset;
+        QPointF pos;
 
-        QNetworkAccessManager networkAccessManager;
 };
 
-#endif //CSEARCHGOOGLE_H
+#endif //CELEVATIONDIALOG_H
 
diff --git a/src/helpers/CHistoryListWidget.cpp b/src/helpers/CHistoryListWidget.cpp
new file mode 100644
index 0000000..351f4bd
--- /dev/null
+++ b/src/helpers/CHistoryListWidget.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 "helpers/CHistoryListWidget.h"
+#include "gis/CGisWidget.h"
+
+#include <QtWidgets>
+
+CHistoryListWidget::CHistoryListWidget(QWidget *parent)
+    : QListWidget(parent)
+{
+    setContextMenuPolicy(Qt::CustomContextMenu);
+    connect(this, SIGNAL(itemSelectionChanged()), this, SLOT(slotSelectionChanged()));
+    connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));
+
+    menu = new QMenu(this);
+    actionCutHistory = menu->addAction(QIcon("://icons/32x32/CutHistory.png"),tr("Cut history"), this, SLOT(slotCutHistory()));
+}
+
+CHistoryListWidget::~CHistoryListWidget()
+{
+
+}
+
+void CHistoryListWidget::setupHistory(IGisItem& gisItem)
+{
+    blockSignals(true);
+    clear();
+
+    key = gisItem.getKey();
+
+    const IGisItem::history_t& history = gisItem.getHistory();
+
+    //foreach(const IGisItem::history_event_t& event, history.events)
+    for(int i = 0; i < history.events.size(); i++)
+    {
+        const IGisItem::history_event_t& event = history.events[i];
+
+        QString str;
+        QListWidgetItem * item = new QListWidgetItem(this);
+
+        str  = event.time.toString();
+        str += "\n";
+        str += event.comment;
+
+        item->setText(str);
+        item->setIcon(QIcon(event.icon));
+        if(event.data.isEmpty())
+        {
+            item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
+        }
+    }
+
+    if(history.histIdxCurrent < count())
+    {
+        setCurrentItem(item(history.histIdxCurrent));
+    }
+    blockSignals(false);
+}
+
+void CHistoryListWidget::slotSelectionChanged()
+{
+    IGisItem * item = CGisWidget::self().getItemByKey(key);
+    if(item == 0)
+    {
+        return;
+    }
+
+    item->loadHistory(currentRow());
+    item->setText(1,"*");
+    item->parent()->setText(1,"*");
+
+    emit sigChanged();
+}
+
+void CHistoryListWidget::slotContextMenu(const QPoint& point)
+{
+    if(currentRow() == (count() - 1) || (count() == 0))
+    {
+        return;
+    }
+
+    QPoint p = mapToGlobal(point);
+    menu->exec(p);
+}
+
+void CHistoryListWidget::slotCutHistory()
+{
+    if(currentRow() == (count() - 1))
+    {
+        return;
+    }
+
+    IGisItem * item = CGisWidget::self().getItemByKey(key);
+    if(item == 0)
+    {
+        return;
+    }
+
+    item->cutHistory();
+    item->setText(1,"*");
+    item->parent()->setText(1,"*");
+
+    emit sigChanged();
+}
diff --git a/src/gis/search/CSearchGoogle.h b/src/helpers/CHistoryListWidget.h
similarity index 63%
copy from src/gis/search/CSearchGoogle.h
copy to src/helpers/CHistoryListWidget.h
index e920e93..02ea2ed 100644
--- a/src/gis/search/CSearchGoogle.h
+++ b/src/helpers/CHistoryListWidget.h
@@ -16,36 +16,34 @@
 
 **********************************************************************************************/
 
-#ifndef CSEARCHGOOGLE_H
-#define CSEARCHGOOGLE_H
+#ifndef CHISTORYLISTWIDGET_H
+#define CHISTORYLISTWIDGET_H
 
-#include <gis/IGisProject.h>
+#include <QListWidget>
+#include "gis/IGisItem.h"
 
-#include <QObject>
-#include <QNetworkAccessManager>
-
-class CGisListWks;
-class QLineEdit;
-
-class CSearchGoogle : public QObject, public IGisProject
+class CHistoryListWidget : public QListWidget
 {
     Q_OBJECT
     public:
-        CSearchGoogle(CGisListWks * parent);
-        virtual ~CSearchGoogle();
+        CHistoryListWidget(QWidget * parent);
+        virtual ~CHistoryListWidget();
 
-    private slots:
-        void slotChangeSymbol();
-        void slotStartSearch();
-        void slotRequestFinished(QNetworkReply* reply);
+        void setupHistory(IGisItem &gisItem);
 
-    private:
-        QLineEdit * edit;
+    signals:
+        void sigChanged();
 
-        QAction * actSymbol;
+    private slots:
+        void slotSelectionChanged();
+        void slotContextMenu(const QPoint& point);
+        void slotCutHistory();
 
-        QNetworkAccessManager networkAccessManager;
+    private:
+        QString key;
+        QMenu * menu;
+        QAction * actionCutHistory;
 };
 
-#endif //CSEARCHGOOGLE_H
+#endif //CHISTORYLISTWIDGET_H
 
diff --git a/src/helpers/CSelectProjectDialog.cpp b/src/helpers/CSelectProjectDialog.cpp
index 963209a..e73ddbb 100644
--- a/src/helpers/CSelectProjectDialog.cpp
+++ b/src/helpers/CSelectProjectDialog.cpp
@@ -17,27 +17,55 @@
 **********************************************************************************************/
 
 #include "helpers/CSelectProjectDialog.h"
-#include "gis/gpx/CGpxProject.h"
+#include "gis/IGisProject.h"
+#include "helpers/CSettings.h"
 
 #include <QtWidgets>
 
-CSelectProjectDialog::CSelectProjectDialog(QString &key, QString &name, QTreeWidget * parent)
+CSelectProjectDialog::CSelectProjectDialog(QString &key, QString &name, type_e& type, QTreeWidget * parent)
     : QDialog(parent)
     , key(key)
     , name(name)
+    , type(type)
 {
     setupUi(this);
 
-    for(int i = 0; i < parent->topLevelItemCount(); i++)
+    if(parent)
     {
-        CGpxProject * project = dynamic_cast<CGpxProject*>(parent->topLevelItem(i));
-        if(project == 0)
+        for(int i = 0; i < parent->topLevelItemCount(); i++)
         {
-         continue;
+            IGisProject * project = dynamic_cast<IGisProject*>(parent->topLevelItem(i));
+            if(project == 0)
+            {
+             continue;
+            }
+
+            QListWidgetItem * item = new QListWidgetItem(project->icon(0), project->text(0),listWidget);
+            item->setData(Qt::UserRole, project->getKey());
         }
+    }
+    else
+    {
+        listWidget->hide();
+        label1->hide();
+    }
+    frameType->setEnabled(listWidget->count() == 0);
 
-        QListWidgetItem * item = new QListWidgetItem(project->icon(0), project->text(0),listWidget);
-        item->setData(Qt::UserRole, project->getKey());
+    SETTINGS;
+    QString filter = cfg.value("Paths/lastGisFilter", "GPS Exchange Format (*.qms)").toString();
+    if(filter.contains("qms"))
+    {
+        radioQms->setChecked(true);
+        type = eTypeQms;
+    }
+    else if(filter.contains("gpx"))
+    {
+        radioGpx->setChecked(true);
+        type = eTypeGpx;
+    }
+    else
+    {
+        radioQms->setChecked(true);
     }
 
     buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
@@ -45,7 +73,10 @@ CSelectProjectDialog::CSelectProjectDialog(QString &key, QString &name, QTreeWid
     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)));
+    connect(radioQms, SIGNAL(clicked()), this, SLOT(slotTypeChanged()));
+    connect(radioGpx, SIGNAL(clicked()), this, SLOT(slotTypeChanged()));
 
+    adjustSize();
 }
 
 CSelectProjectDialog::~CSelectProjectDialog()
@@ -61,11 +92,13 @@ void CSelectProjectDialog::reject()
     QDialog::reject();
 }
 
+
 void CSelectProjectDialog::slotItemClicked(QListWidgetItem * item)
 {
 
     key = item->data(Qt::UserRole).toString();
     lineEdit->setText(item->text());
+    frameType->setEnabled(false);
 }
 
 void CSelectProjectDialog::slotProjectChanged(const QString& text)
@@ -79,4 +112,17 @@ void CSelectProjectDialog::slotProjectEdited(const QString& text)
     buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!text.isEmpty());
     key.clear();
     name = text;
+    frameType->setEnabled(true);
+}
+
+void CSelectProjectDialog::slotTypeChanged()
+{
+    if(radioQms->isChecked())
+    {
+        type = eTypeQms;
+    }
+    else if(radioGpx->isChecked())
+    {
+        type = eTypeGpx;
+    }
 }
diff --git a/src/helpers/CSelectProjectDialog.h b/src/helpers/CSelectProjectDialog.h
index 25150e2..0db2d7b 100644
--- a/src/helpers/CSelectProjectDialog.h
+++ b/src/helpers/CSelectProjectDialog.h
@@ -28,7 +28,15 @@ class CSelectProjectDialog : public QDialog, private Ui::ISelectProjectDialog
 {
     Q_OBJECT
     public:
-        CSelectProjectDialog(QString& key, QString& name, QTreeWidget *parent);
+        enum type_e
+        {
+             eTypeNone
+            ,eTypeQms
+            ,eTypeGpx
+
+        };
+
+        CSelectProjectDialog(QString& key, QString& name, type_e& type, QTreeWidget *parent);
         virtual ~CSelectProjectDialog();
 
     public slots:
@@ -38,10 +46,12 @@ class CSelectProjectDialog : public QDialog, private Ui::ISelectProjectDialog
         void slotItemClicked(QListWidgetItem * item);
         void slotProjectChanged(const QString& text);
         void slotProjectEdited(const QString& text);
+        void slotTypeChanged();
 
     private:
         QString& key;
         QString& name;
+        type_e& type;
 
 };
 
diff --git a/src/helpers/IElevationDialog.ui b/src/helpers/IElevationDialog.ui
new file mode 100644
index 0000000..96461ed
--- /dev/null
+++ b/src/helpers/IElevationDialog.ui
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>IElevationDialog</class>
+ <widget class="QDialog" name="IElevationDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>121</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Edit elevation...</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Elevation</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="lineValue"/>
+     </item>
+     <item>
+      <widget class="QLabel" name="labelUnit">
+       <property name="text">
+        <string>-</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="toolGetEle">
+       <property name="toolTip">
+        <string>Get elevation from active digital elevation model.</string>
+       </property>
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset resource="../resources.qrc">
+         <normaloff>:/icons/32x32/SetEle.png</normaloff>:/icons/32x32/SetEle.png</iconset>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QLabel" name="labelMessage">
+     <property name="text">
+      <string/>
+     </property>
+    </widget>
+   </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>
+  <include location="../resources.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>IElevationDialog</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>IElevationDialog</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/ISelectProjectDialog.ui b/src/helpers/ISelectProjectDialog.ui
index 40d521b..ffb09bc 100644
--- a/src/helpers/ISelectProjectDialog.ui
+++ b/src/helpers/ISelectProjectDialog.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>400</width>
-    <height>300</height>
+    <height>332</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -15,7 +15,7 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QLabel" name="label">
+    <widget class="QLabel" name="label1">
      <property name="text">
       <string>Select project from list or enter new project name.</string>
      </property>
@@ -31,6 +31,63 @@
     <widget class="QLineEdit" name="lineEdit"/>
    </item>
    <item>
+    <widget class="QLabel" name="label2">
+     <property name="text">
+      <string>New project is created as:</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QFrame" name="frameType">
+     <property name="enabled">
+      <bool>true</bool>
+     </property>
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Plain</enum>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <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="QRadioButton" name="radioQms">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="text">
+         <string>*.qms</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QRadioButton" name="radioGpx">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="text">
+         <string>*.gpx</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
diff --git a/src/icons/32x32/AddProject.png b/src/icons/32x32/AddProject.png
index c56afa7..598c22b 100644
Binary files a/src/icons/32x32/AddProject.png and b/src/icons/32x32/AddProject.png differ
diff --git a/src/icons/32x32/CutHistory.png b/src/icons/32x32/CutHistory.png
new file mode 100644
index 0000000..2b4287a
Binary files /dev/null and b/src/icons/32x32/CutHistory.png differ
diff --git a/src/icons/32x32/FolderDEM.png b/src/icons/32x32/FolderDEM.png
index 3dfe9c6..48ed755 100644
Binary files a/src/icons/32x32/FolderDEM.png and b/src/icons/32x32/FolderDEM.png differ
diff --git a/src/icons/32x32/FolderMap.png b/src/icons/32x32/FolderMap.png
index 4ef8d56..e5a2b9b 100644
Binary files a/src/icons/32x32/FolderMap.png and b/src/icons/32x32/FolderMap.png differ
diff --git a/src/icons/32x32/GpxProject.png b/src/icons/32x32/GpxProject.png
new file mode 100644
index 0000000..227bde5
Binary files /dev/null and b/src/icons/32x32/GpxProject.png differ
diff --git a/src/icons/32x32/LoadGIS.png b/src/icons/32x32/LoadGIS.png
index d4d20ee..23bb3d0 100644
Binary files a/src/icons/32x32/LoadGIS.png and b/src/icons/32x32/LoadGIS.png differ
diff --git a/src/icons/32x32/Opacity.png b/src/icons/32x32/Opacity.png
new file mode 100644
index 0000000..45fa539
Binary files /dev/null and b/src/icons/32x32/Opacity.png differ
diff --git a/src/icons/32x32/Pattern.png b/src/icons/32x32/Pattern.png
new file mode 100644
index 0000000..5f13738
Binary files /dev/null and b/src/icons/32x32/Pattern.png differ
diff --git a/src/icons/32x32/QmsProject.png b/src/icons/32x32/QmsProject.png
new file mode 100644
index 0000000..623b247
Binary files /dev/null and b/src/icons/32x32/QmsProject.png differ
diff --git a/src/icons/32x32/SaveAllGIS.png b/src/icons/32x32/SaveAllGIS.png
index 5a16b83..e7ce2aa 100644
Binary files a/src/icons/32x32/SaveAllGIS.png and b/src/icons/32x32/SaveAllGIS.png differ
diff --git a/src/icons/32x32/SaveGIS.png b/src/icons/32x32/SaveGIS.png
index f31f99e..fb5749b 100644
Binary files a/src/icons/32x32/SaveGIS.png and b/src/icons/32x32/SaveGIS.png differ
diff --git a/src/icons/32x32/SaveGISAs.png b/src/icons/32x32/SaveGISAs.png
new file mode 100644
index 0000000..80ebbdc
Binary files /dev/null and b/src/icons/32x32/SaveGISAs.png differ
diff --git a/src/icons/32x32/SetEle.png b/src/icons/32x32/SetEle.png
new file mode 100644
index 0000000..553c25c
Binary files /dev/null and b/src/icons/32x32/SetEle.png differ
diff --git a/src/icons/32x32/Start.png b/src/icons/32x32/Start.png
new file mode 100644
index 0000000..5649a5a
Binary files /dev/null and b/src/icons/32x32/Start.png differ
diff --git a/src/icons/32x32/UnitSetup.png b/src/icons/32x32/UnitSetup.png
new file mode 100644
index 0000000..8315dcb
Binary files /dev/null and b/src/icons/32x32/UnitSetup.png differ
diff --git a/src/icons/32x32/WptProx.png b/src/icons/32x32/WptProx.png
new file mode 100644
index 0000000..a9e8706
Binary files /dev/null and b/src/icons/32x32/WptProx.png differ
diff --git a/src/icons/48x48/AddProject.png b/src/icons/48x48/AddProject.png
index 7699b33..4420466 100644
Binary files a/src/icons/48x48/AddProject.png and b/src/icons/48x48/AddProject.png differ
diff --git a/src/icons/48x48/CutHistory.png b/src/icons/48x48/CutHistory.png
new file mode 100644
index 0000000..1d07549
Binary files /dev/null and b/src/icons/48x48/CutHistory.png differ
diff --git a/src/icons/48x48/FolderDEM.png b/src/icons/48x48/FolderDEM.png
index 6fb7483..21224f3 100644
Binary files a/src/icons/48x48/FolderDEM.png and b/src/icons/48x48/FolderDEM.png differ
diff --git a/src/icons/48x48/FolderMap.png b/src/icons/48x48/FolderMap.png
index f6982e5..71a4939 100644
Binary files a/src/icons/48x48/FolderMap.png and b/src/icons/48x48/FolderMap.png differ
diff --git a/src/icons/48x48/GpxProject.png b/src/icons/48x48/GpxProject.png
new file mode 100644
index 0000000..f59d436
Binary files /dev/null and b/src/icons/48x48/GpxProject.png differ
diff --git a/src/icons/48x48/LoadGIS.png b/src/icons/48x48/LoadGIS.png
index 2b763bd..1abff07 100644
Binary files a/src/icons/48x48/LoadGIS.png and b/src/icons/48x48/LoadGIS.png differ
diff --git a/src/icons/48x48/Opacity.png b/src/icons/48x48/Opacity.png
new file mode 100644
index 0000000..3558441
Binary files /dev/null and b/src/icons/48x48/Opacity.png differ
diff --git a/src/icons/48x48/Pattern.png b/src/icons/48x48/Pattern.png
new file mode 100644
index 0000000..6518afd
Binary files /dev/null and b/src/icons/48x48/Pattern.png differ
diff --git a/src/icons/48x48/QmsProject.png b/src/icons/48x48/QmsProject.png
new file mode 100644
index 0000000..b580137
Binary files /dev/null and b/src/icons/48x48/QmsProject.png differ
diff --git a/src/icons/48x48/SaveAllGIS.png b/src/icons/48x48/SaveAllGIS.png
index 1ea56b7..968a3eb 100644
Binary files a/src/icons/48x48/SaveAllGIS.png and b/src/icons/48x48/SaveAllGIS.png differ
diff --git a/src/icons/48x48/SaveGIS.png b/src/icons/48x48/SaveGIS.png
index 754b4d2..968a3eb 100644
Binary files a/src/icons/48x48/SaveGIS.png and b/src/icons/48x48/SaveGIS.png differ
diff --git a/src/icons/48x48/SaveGISAs.png b/src/icons/48x48/SaveGISAs.png
new file mode 100644
index 0000000..4728b48
Binary files /dev/null and b/src/icons/48x48/SaveGISAs.png differ
diff --git a/src/icons/48x48/SetEle.png b/src/icons/48x48/SetEle.png
new file mode 100644
index 0000000..b53eade
Binary files /dev/null and b/src/icons/48x48/SetEle.png differ
diff --git a/src/icons/48x48/Start.png b/src/icons/48x48/Start.png
new file mode 100644
index 0000000..f837815
Binary files /dev/null and b/src/icons/48x48/Start.png differ
diff --git a/src/icons/48x48/UnitSetup.png b/src/icons/48x48/UnitSetup.png
new file mode 100644
index 0000000..ad28624
Binary files /dev/null and b/src/icons/48x48/UnitSetup.png differ
diff --git a/src/icons/48x48/WptProx.png b/src/icons/48x48/WptProx.png
new file mode 100644
index 0000000..c168484
Binary files /dev/null and b/src/icons/48x48/WptProx.png differ
diff --git a/src/icons/AddProject.svg b/src/icons/AddProject.svg
index 9d47258..876dd05 100644
--- a/src/icons/AddProject.svg
+++ b/src/icons/AddProject.svg
@@ -24,9 +24,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="12.602959"
-     inkscape:cx="24.916712"
-     inkscape:cy="20.497272"
+     inkscape:zoom="11.2"
+     inkscape:cx="-10.763153"
+     inkscape:cy="35.807015"
      inkscape:document-units="px"
      inkscape:current-layer="layer1"
      showgrid="true"
@@ -61,42 +61,35 @@
      id="layer1"
      transform="translate(0,-988.36218)">
     <g
-       id="g2995"
-       transform="matrix(0.62228539,0,0,0.62884847,17.380503,388.19153)">
+       id="g2999"
+       transform="translate(-0.19584588,0)">
       <path
-         sodipodi:nodetypes="cccc"
+         style="fill:none;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 54.195846,1014.5765 c 0,0 -15,1 -22.999999,6 -6.836782,4.273 14.726779,4.2732 10.999999,8 -3.72678,3.7268 -28.376052,2.4145 -32.8593748,5.1854 -2.005004,1.2391 -5.0000008,5 -5.0000008,5"
+         id="path3078"
          inkscape:connector-curvature="0"
-         id="path2987"
-         d="m 7.6081967,996.43283 44.0373563,21.01087 -36.302255,10.3989 39.144317,14.0072"
-         style="fill:none;stroke:#000080;stroke-width:7.02477074;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         sodipodi:nodetypes="cccc"
-         inkscape:connector-curvature="0"
-         id="path3762-2-1"
-         d="m 8.1970788,995.68769 0,-13.88662 12.1422072,6.27542 -12.0000003,5"
-         style="fill:#ff0000;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         sodipodi:nodetypes="cccc"
-         inkscape:connector-curvature="0"
-         id="path3762-2-1-8"
-         d="m 50.25065,1015.8841 0,-13.8866 12.142207,6.2754 -12,5"
-         style="fill:#ccff00;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         sodipodi:nodetypes="cccc"
-         inkscape:connector-curvature="0"
-         id="path3762-2-1-6"
-         d="m 15.464935,1026.2412 0,-13.8866 12.142207,6.2754 -12,5"
-         style="fill:#ccff00;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         sodipodi:nodetypes="cccc"
-         inkscape:connector-curvature="0"
-         id="path3762-2-1-9"
-         d="m 55.232793,1042.4734 0,-13.8866 12.142207,6.2754 -12,5"
-         style="fill:#ff00ff;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+         sodipodi:nodetypes="csssc" />
     </g>
-    <path
-       style="fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.54221296;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 30.703645,1024.2525 9.962739,0 0,9.9465 8.53232,0 0,-9.9465 9.962729,0 0,-8.5649 -9.962729,0 -8e-6,-9.9464 -8.532312,0 -9e-6,9.9464 -9.96273,0 0,8.5649 z"
+    <rect
+       style="fill:none;stroke:none"
+       id="rect3769"
+       width="40"
+       height="40"
+       x="2.6406245"
+       y="991.49402" />
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3859"
+       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:12px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
+         id="flowRegion3861"><rect
+           id="rect3863"
+           width="75.35714"
+           height="62.142857"
+           x="-9.4642859"
+           y="2.2142856" /></flowRegion><flowPara
+         id="flowPara3865" /></flowRoot>    <path
+       style="fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.82368082;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 3.0524649,1010.8846 10.2142871,0 0,10.1976 8.747755,0 0,-10.1976 10.214278,0 0,-8.7811 -10.214278,0 -8e-6,-10.19764 -8.747747,0 -8e-6,10.19764 -10.2142791,0 0,8.7811 z"
        id="rect3117-7"
        inkscape:connector-curvature="0"
        inkscape:export-filename="/home/oeichler/Code/cpp/MapRoom/src/icons/16x16/add.png"
diff --git a/src/icons/CutHistory.svg b/src/icons/CutHistory.svg
new file mode 100644
index 0000000..6c307a1
--- /dev/null
+++ b/src/icons/CutHistory.svg
@@ -0,0 +1,139 @@
+<?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="CutHistory.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="-12.101692"
+     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="996"
+     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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3775"
+       transform="matrix(0.8660254,0.5,-0.5,0.8660254,35.26718,4.2611783)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2985"
+         d="m 8.9371346,25.289416 -21.5767716,6.313192 -0.241381,0.321965 c -0.03367,-0.748711 -0.288635,-1.457098 -0.791946,-2.016795 -1.293429,-1.438332 -3.703844,-1.347833 -5.370343,0.203764 -1.666499,1.551598 -1.972065,3.986732 -0.678636,5.425064 1.08744,1.209266 2.967933,1.322609 4.526103,0.410531 6.5284443,-2.491424 20.2395651,-2.54072 24.1329746,-10.657721 z"
+         style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.54051167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         transform="matrix(0.35160043,0.35262913,-0.41424948,0.41546148,-6.475038,7.0896072)"
+         sodipodi:open="true"
+         sodipodi:end="12.08609"
+         sodipodi:start="5.8033439"
+         d="m 25.548273,41.153446 c 1.019823,1.959657 0.257938,4.375003 -1.701719,5.394827 -1.959657,1.019823 -4.375003,0.257938 -5.394827,-1.701719 -1.019823,-1.959657 -0.257938,-4.375003 1.701719,-5.394827 1.959048,-1.019506 4.373648,-0.25844 5.394015,1.700161"
+         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>
+    <rect
+       style="fill:#ffffff;stroke:#000080;stroke-width:1.23895322999999991;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3759"
+       width="23.761047"
+       height="38.761047"
+       x="15.119476"
+       y="5.1194768" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1.01503849000000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 15.287879,14 23.696969,0"
+       id="path3759"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 15,24 24,0"
+       id="path3761"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1.01317083999999991px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 15.013258,34 23.609848,0"
+       id="path3763"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g3770"
+       transform="matrix(0.8660254,0.5,-0.5,0.8660254,35.267181,4.2611781)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path2985-4"
+         d="m -2.2550767,14.064459 -6.2947752,21.6399 -0.321026,0.242087 c 0.746527,0.03376 1.4528476,0.28948 2.0109119,0.794263 1.434136,1.297214 1.3439019,3.714681 -0.2031695,5.386056 -1.5470714,1.671375 -3.9751015,1.977835 -5.4092375,0.680621 -1.205738,-1.090621 -1.318751,-2.976616 -0.409334,-4.539344 2.484157,-6.547546 2.533309,-20.298782 10.6266303,-24.203583 z"
+         style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.54051167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         transform="matrix(0.35160043,0.35262913,-0.41424948,0.41546148,0.44968913,14.185671)"
+         sodipodi:open="true"
+         sodipodi:end="12.08609"
+         sodipodi:start="5.8033439"
+         d="m 25.548273,41.153446 c 1.019823,1.959657 0.257938,4.375003 -1.701719,5.394827 -1.959657,1.019823 -4.375003,0.257938 -5.394827,-1.701719 -1.019823,-1.959657 -0.257938,-4.375003 1.701719,-5.394827 1.959048,-1.019506 4.373648,-0.25844 5.394015,1.700161"
+         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.35160043,0.35262913,-0.41424948,0.41546148,-6.8801053,7.8164315)"
+         sodipodi:open="true"
+         sodipodi:end="12.08609"
+         sodipodi:start="5.8033439"
+         d="m 31.887068,31.538362 c 0.254956,0.489914 0.06449,1.09375 -0.42543,1.348706 -0.489914,0.254956 -1.09375,0.06448 -1.348706,-0.42543 -0.254956,-0.489914 -0.06449,-1.09375 0.42543,-1.348706 0.489762,-0.254877 1.093411,-0.06461 1.348503,0.42504"
+         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/FolderDEM.svg b/src/icons/FolderDEM.svg
index cf2bc90..afcd4fd 100644
--- a/src/icons/FolderDEM.svg
+++ b/src/icons/FolderDEM.svg
@@ -25,8 +25,8 @@
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="15.556349"
-     inkscape:cx="19.772096"
-     inkscape:cy="29.337851"
+     inkscape:cx="3.9586169"
+     inkscape:cy="30.095308"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:document-units="px"
@@ -62,37 +62,34 @@
      id="layer1"
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
-    <g
-       id="g3014">
-      <path
-         id="path3006"
-         d="m 9.9720309,16.621509 -3.8289187,3.121631 -3.7953317,0 0,24.836138 38.0876655,0 0,-24.836138 -19.043833,0 -3.828919,-3.121631 -7.5906631,0 z"
-         style="fill:#ffffff;stroke:#000080;stroke-width:1.94090377999999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <rect
-         y="21.421965"
-         x="6.010222"
-         height="21.04912"
-         width="30.466324"
-         id="rect3766"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3799"
-         d="m 6.1096746,43.304162 0,-8.665498 3.8082904,-4.332749 3.80829,4.332749 7.616582,-12.998247 7.616581,8.665498 3.80829,-4.332749 3.808291,8.665498 0,8.665498 z"
-         style="fill:#d5d5ff;stroke:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3815"
-         d="m 6.1484012,43.244628 0,-5.302204 3.8082904,0 3.8082904,-5.302203 3.808291,5.302203 7.616581,-10.604407 7.616581,5.302204 3.80829,5.302203 0,5.302204 z"
-         style="fill:#8080ff;stroke:none" />
-      <rect
-         y="10.600393"
-         x="1.391613"
-         height="40"
-         width="40"
-         id="rect3797"
-         style="fill:none;stroke:none" />
-    </g>
+    <rect
+       style="fill:#ffffff;stroke:#000080"
+       id="rect3797"
+       width="40"
+       height="40"
+       x="1.391613"
+       y="10.600393" />
+    <path
+       style="fill:#009cff;fill-opacity:1;stroke:none"
+       d="m 1.8975662,49.925253 0,-8.665498 4.8729651,-4.332749 4.8729667,4.332749 9.745933,-12.998247 9.745932,8.665498 4.872965,-4.332749 4.872967,8.665498 0,8.665498 z"
+       id="path3799"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#000080;stroke:none"
+       d="m 1.6267696,50.444261 0,-5.302204 4.977424,0 4.9774264,-5.302203 4.977426,5.302203 9.95485,-10.604407 9.954849,5.302204 4.977424,5.302203 0,5.302204 z"
+       id="path3815"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000080;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
+       x="4.5142612"
+       y="23.128567"
+       id="text3009"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3011"
+         x="4.5142612"
+         y="23.128567"
+         style="font-size:16px">c://</tspan></text>
   </g>
 </svg>
diff --git a/src/icons/FolderMap.svg b/src/icons/FolderMap.svg
index ca5e938..bfd3254 100644
--- a/src/icons/FolderMap.svg
+++ b/src/icons/FolderMap.svg
@@ -24,9 +24,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="11"
-     inkscape:cx="12.547133"
-     inkscape:cy="26.323091"
+     inkscape:zoom="15.556349"
+     inkscape:cx="19.471582"
+     inkscape:cy="31.074351"
      inkscape:current-layer="layer1"
      showgrid="true"
      inkscape:document-units="px"
@@ -35,7 +35,11 @@
      inkscape:window-height="996"
      inkscape:window-x="-2"
      inkscape:window-y="-3"
-     inkscape:window-maximized="1" />
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3060" />
+  </sodipodi:namedview>
   <metadata
      id="metadata3518">
     <rdf:RDF>
@@ -52,32 +56,36 @@
      id="layer1"
      inkscape:label="Layer 1"
      inkscape:groupmode="layer">
-    <g
-       id="g3003">
-      <path
-         id="path3006"
-         d="m 18.125872,23.021115 -3.828918,3.121631 -3.795332,0 0,24.836138 38.087665,0 0,-24.836138 -19.043833,0 -3.828919,-3.121631 -7.590663,0 z"
-         style="fill:#ffffff;stroke:#000080;stroke-width:1.94090377999999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         inkscape:connector-curvature="0" />
-      <rect
-         y="27.545454"
-         x="12.909091"
-         height="21.363638"
-         width="33.090908"
-         id="rect3788"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path3319-60"
-         d="m 17.153355,47.90375 c -0.37071,-0.114609 -0.77584,-0.247135 -0.90027,-0.294522 -0.22434,-0.08541 -0.22521,-0.08668 -0.1037,-0.149144 0.0674,-0.03466 0.17632,-0.06376 0.24202,-0.06474 0.0657,-7.07e-4 0.32235,-0.05264 0.57033,-0.114753 0.7605,-0.190674 1.15015,-0.22527 2.03222,-0.180425 0.44199,0.02248 0.83863,0.05414 0.88141,0.07053 0.0427,0.01632 0.11184,0.0095 0.15348,-0.01489 0.0648,-0.03827 0.0615,-0.05918 -0.0221,-0.144814 l -0.0978,-0.100195 0.38503,0.03527 c 0.66965,0. [...]
-         style="fill:#000080;fill-opacity:1" />
-      <rect
-         y="17"
-         x="9.545454"
-         height="40"
-         width="40"
-         id="rect3856"
-         style="fill:none;stroke:none" />
-    </g>
+    <rect
+       style="fill:#ffffff;stroke:#000080"
+       id="rect3797"
+       width="40"
+       height="40"
+       x="10.155192"
+       y="13.161652" />
+    <path
+       style="fill:#000080;fill-opacity:1"
+       d="m 16.31268,51.395951 c -0.446621,-0.114609 -0.934711,-0.247135 -1.08462,-0.294522 -0.270279,-0.08541 -0.271327,-0.08668 -0.124935,-0.149144 0.0812,-0.03466 0.212425,-0.06376 0.291579,-0.06474 0.07915,-7.07e-4 0.388358,-0.05264 0.687117,-0.114753 0.91623,-0.190674 1.385669,-0.22527 2.448363,-0.180425 0.532497,0.02248 1.010358,0.05414 1.061898,0.07053 0.05144,0.01632 0.134742,0.0095 0.184909,-0.01489 0.07807,-0.03827 0.07409,-0.05918 -0.02663,-0.144814 l -0.117827,-0.100195 0.463 [...]
+       id="path3319-60"
+       inkscape:connector-curvature="0" />
+    <rect
+       style="fill:none;stroke:none"
+       id="rect3856"
+       width="40"
+       height="40"
+       x="9.545454"
+       y="17" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000080;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
+       x="13.518527"
+       y="25.786196"
+       id="text3009"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3011"
+         x="13.518527"
+         y="25.786196"
+         style="font-size:16px">c://</tspan></text>
   </g>
 </svg>
diff --git a/src/icons/GisProject.svg b/src/icons/GisProject.svg
deleted file mode 100644
index 3cb2955..0000000
--- a/src/icons/GisProject.svg
+++ /dev/null
@@ -1,94 +0,0 @@
-<?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="64"
-   height="64"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="GisProject.svg">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="11.2"
-     inkscape:cx="28.178217"
-     inkscape:cy="28.142736"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="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="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 />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Ebene 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(0,-988.36218)">
-    <path
-       style="fill:none;stroke:#000080;stroke-width:7.02477074;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 7.6081967,996.43283 44.0373563,21.01087 -36.302255,10.3989 39.144317,14.0072"
-       id="path2987"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:#ff0000;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 8.1970788,995.68769 0,-13.88662 12.1422072,6.27542 -12.0000003,5"
-       id="path3762-2-1"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:#ccff00;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 50.25065,1015.8841 0,-13.8866 12.142207,6.2754 -12,5"
-       id="path3762-2-1-8"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:#ccff00;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 15.464935,1026.2412 0,-13.8866 12.142207,6.2754 -12,5"
-       id="path3762-2-1-6"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-    <path
-       style="fill:#ff00ff;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 55.232793,1042.4734 0,-13.8866 12.142207,6.2754 -12,5"
-       id="path3762-2-1-9"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="cccc" />
-  </g>
-</svg>
diff --git a/src/icons/GpxProject.svg b/src/icons/GpxProject.svg
new file mode 100644
index 0000000..2a27671
--- /dev/null
+++ b/src/icons/GpxProject.svg
@@ -0,0 +1,115 @@
+<?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="64"
+   height="64"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="GpxProject.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.2"
+     inkscape:cx="13.790418"
+     inkscape:cy="35.807015"
+     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,-988.36218)">
+    <path
+       style="fill:none;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 54,1014.3622 c 0,0 -15,1 -23,6 -6.836781,4.273 14.72678,4.2732 11,8 -3.72678,3.7268 -28.376052,2.4145 -32.8593751,5.1854 -2.0050036,1.2391 -5.0000004,5 -5.0000004,5"
+       id="path3078"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssc" />
+    <g
+       id="g3081"
+       transform="translate(-4.5367432e-7,-3.199129e-6)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3763"
+         d="m 27.270471,992.71371 25.339695,10.78739 -28.507157,10.7873 3.167462,-21.57469"
+         style="fill:#0000ff;stroke:#0000ff;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 20.720056,1031.245 3.609174,-39.39147 3.609174,0 z"
+         style="fill:#000000;stroke:#000000;stroke-width:0.71901649px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+    </g>
+    <rect
+       style="fill:none;stroke:none"
+       id="rect3769"
+       width="40"
+       height="40"
+       x="2.640624"
+       y="991.49402" />
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
+       x="-1032.9608"
+       y="15.999999"
+       id="text3848"
+       sodipodi:linespacing="125%"
+       transform="matrix(0,-1,1,0,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3850"
+         x="-1032.9608"
+         y="15.999999"
+         style="font-size:18px">GPX</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3859"
+       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:12px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
+         id="flowRegion3861"><rect
+           id="rect3863"
+           width="75.35714"
+           height="62.142857"
+           x="-9.4642859"
+           y="2.2142856" /></flowRegion><flowPara
+         id="flowPara3865" /></flowRoot>  </g>
+</svg>
diff --git a/src/icons/LoadGIS.svg b/src/icons/LoadGIS.svg
index adac6af..d139d8b 100644
--- a/src/icons/LoadGIS.svg
+++ b/src/icons/LoadGIS.svg
@@ -9,14 +9,14 @@
    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="svg3373"
+   width="64"
+   height="64"
+   id="svg2"
    version="1.1"
    inkscape:version="0.48.4 r9939"
-   sodipodi:docname="LoadGIS.svg">
+   sodipodi:docname="QmsProject.svg">
   <defs
-     id="defs3375" />
+     id="defs4" />
   <sodipodi:namedview
      id="base"
      pagecolor="#ffffff"
@@ -24,91 +24,79 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="11"
-     inkscape:cx="17.876669"
-     inkscape:cy="30.392307"
+     inkscape:zoom="11.2"
+     inkscape:cx="2.1832751"
+     inkscape:cy="35.807015"
+     inkscape:document-units="px"
      inkscape:current-layer="layer1"
      showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
      inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="-1"
-     inkscape:window-y="-15"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
      inkscape:window-maximized="1">
     <inkscape:grid
        type="xygrid"
-       id="grid4212" />
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
   </sodipodi:namedview>
   <metadata
-     id="metadata3378">
+     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></dc:title>
       </cc:Work>
     </rdf:RDF>
   </metadata>
   <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
      id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <rect
-       style="fill:none;stroke:none"
-       id="rect3170-3"
-       width="35"
-       height="35"
-       x="15.045455"
-       y="14.318178" />
+     transform="translate(0,-988.36218)">
+    <path
+       style="fill:none;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 54.195846,1014.5765 c 0,0 -15,1 -22.999999,6 -6.836782,4.273 14.726779,4.2732 10.999999,8 -3.72678,3.7268 -28.376052,2.4145 -32.8593748,5.1854 -2.005004,1.2391 -5.0000008,5 -5.0000008,5"
+       id="path3078"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssc" />
     <g
-       id="g4204"
-       transform="translate(-4.6031783,0)">
-      <rect
-         y="15.014559"
-         x="20.308897"
-         height="33.607246"
-         width="24.47312"
-         id="rect4006-9-0"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.32052755;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+       id="g3015"
+       transform="translate(0,-3.4013032)">
       <path
          inkscape:connector-curvature="0"
-         id="path4010-7-5"
-         d="m 24.065275,19.49552 16.960344,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+         id="path3763"
+         d="m 27.270471,996.11501 25.339695,10.78739 -28.507157,10.7873 3.167462,-21.57469"
+         style="fill:#008000;stroke:#008000;stroke-width:1.34993112;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
       <path
-         inkscape:transform-center-y="-1.9999976"
-         inkscape:transform-center-x="-2.567705"
+         sodipodi:nodetypes="cccc"
          inkscape:connector-curvature="0"
-         id="path4010-0-6-2"
-         d="m 24.065275,25.09719 16.960344,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:transform-center-y="-2.9999926"
-         inkscape:transform-center-x="0.432295"
-         inkscape:connector-curvature="0"
-         id="path4010-6-2-8"
-         d="m 24.065294,30.69876 16.960345,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text3176"
-         y="42.65152"
-         x="20.777876"
-         style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
-         xml:space="preserve"><tspan
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
-           y="42.65152"
-           x="20.777876"
-           id="tspan3178"
-           sodipodi:role="line">GPX</tspan></text>
+         id="path3761"
+         d="m 20.720056,1034.6463 3.609174,-39.39147 3.609174,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;stroke:#000080;stroke-width:1.44390047px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       d="M 41.55767,15.070198 49.384348,31.792055 41.55767,48.513913 z"
-       id="path4214"
-       inkscape:connector-curvature="0" />
-  </g>
+    <rect
+       style="fill:none;stroke:none"
+       id="rect3769"
+       width="40"
+       height="40"
+       x="2.6406245"
+       y="991.49402" />
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3859"
+       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:12px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
+         id="flowRegion3861"><rect
+           id="rect3863"
+           width="75.35714"
+           height="62.142857"
+           x="-9.4642859"
+           y="2.2142856" /></flowRegion><flowPara
+         id="flowPara3865" /></flowRoot>  </g>
 </svg>
diff --git a/src/icons/Opacity.svg b/src/icons/Opacity.svg
new file mode 100644
index 0000000..a76af8d
--- /dev/null
+++ b/src/icons/Opacity.svg
@@ -0,0 +1,100 @@
+<?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="64"
+   height="64"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Opacity.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.2"
+     inkscape:cx="3.0250849"
+     inkscape:cy="32.738302"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="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="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,-988.36218)">
+    <g
+       transform="translate(5,1.00003)"
+       id="g3960">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3763"
+         d="m 16.875788,998.65233 25.339695,10.78737 -28.507157,10.7873 3.167462,-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 10.325373,1037.1836 3.609174,-39.39145 3.609174,0 z"
+         style="fill:#000000;stroke:#000000;stroke-width:0.71901649px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+      <rect
+         y="997.48792"
+         x="9.9636908"
+         height="40"
+         width="40"
+         id="rect3769"
+         style="fill:none;stroke:none" />
+    </g>
+    <rect
+       style="fill:#000080;stroke:#000000;stroke-width:0.96153849000000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:0.32069972000000002"
+       id="rect3992"
+       width="24.038462"
+       height="49.03846"
+       x="9.9807701"
+       y="994.3429" />
+    <rect
+       style="fill:#000080;fill-opacity:0.87172013999999998;stroke:#000000;stroke-width:0.96153849000000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3992-3"
+       width="24.038462"
+       height="49.03846"
+       x="34.10577"
+       y="994.30719" />
+  </g>
+</svg>
diff --git a/src/icons/Pattern.svg b/src/icons/Pattern.svg
new file mode 100644
index 0000000..1571a08
--- /dev/null
+++ b/src/icons/Pattern.svg
@@ -0,0 +1,278 @@
+<?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="64"
+   height="64"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Neues Dokument 1">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.2"
+     inkscape:cx="3.0250849"
+     inkscape:cy="22.024016"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="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="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,-988.36218)">
+    <rect
+       style="fill:none;stroke:#000080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2987"
+       width="20"
+       height="20"
+       x="5"
+       y="1027.3622" />
+    <rect
+       style="fill:none;stroke:#000080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2987-8"
+       width="20"
+       height="20"
+       x="24.928581"
+       y="1027.3438" />
+    <rect
+       style="fill:none;stroke:#000080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2987-0"
+       width="20"
+       height="20"
+       x="24.910669"
+       y="1007.3445" />
+    <rect
+       style="fill:none;stroke:#000080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2987-6"
+       width="20"
+       height="20"
+       x="4.9821444"
+       y="1007.3445" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 5,24 5,-5"
+       id="path3789"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5,29 15,19"
+       id="path3791"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5,34 20,19"
+       id="path3793"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5,39 25,19"
+       id="path3795"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 10,39 25,24"
+       id="path3797"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 15,39 25,29"
+       id="path3799"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 20,39 5,-5"
+       id="path3801"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 5,54 5,5"
+       id="path3803"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5,49 15,59"
+       id="path3805"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5,44 20,59"
+       id="path3807"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 5,39 25,59"
+       id="path3809"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 10,39 25,54"
+       id="path3811"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 15,39 25,49"
+       id="path3813"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 21,39 4,5"
+       id="path3815"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 25,19 45,39"
+       id="path3817"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 30,19 45,34"
+       id="path3819"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 35,19 45,29"
+       id="path3821"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 40,19 5,5"
+       id="path3823"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 25,24 40,39"
+       id="path3825"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 25,34 5,5"
+       id="path3829"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 25,39 45,19"
+       id="path3831"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 25,29 35,39"
+       id="path3839"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 25,24 5,-5"
+       id="path3841"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 25,29 35,19"
+       id="path3843"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 25,34 40,19"
+       id="path3845"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 30,39 45,24"
+       id="path3847"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 35,39 45,29"
+       id="path3849"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 40,39 5,-5"
+       id="path3851"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 25,44 20,0"
+       id="path3853"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 25,49 20,0"
+       id="path3855"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+    <path
+       style="fill:none;stroke:#000080;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 25,54 20,0"
+       id="path3857"
+       inkscape:connector-curvature="0"
+       transform="translate(0,988.36218)" />
+  </g>
+</svg>
diff --git a/src/icons/QmsProject.svg b/src/icons/QmsProject.svg
new file mode 100644
index 0000000..46d849b
--- /dev/null
+++ b/src/icons/QmsProject.svg
@@ -0,0 +1,115 @@
+<?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="64"
+   height="64"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="QmsProject.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.2"
+     inkscape:cx="2.1832751"
+     inkscape:cy="35.807015"
+     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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-988.36218)">
+    <path
+       style="fill:none;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 54.195846,1014.5765 c 0,0 -15,1 -22.999999,6 -6.836782,4.273 14.726779,4.2732 10.999999,8 -3.72678,3.7268 -28.376052,2.4145 -32.8593748,5.1854 -2.005004,1.2391 -5.0000008,5 -5.0000008,5"
+       id="path3078"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssc" />
+    <g
+       id="g3015"
+       transform="translate(0,-3.4013032)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3763"
+         d="m 27.270471,996.11501 25.339695,10.78739 -28.507157,10.7873 3.167462,-21.57469"
+         style="fill:#008000;stroke:#008000;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 20.720056,1034.6463 3.609174,-39.39147 3.609174,0 z"
+         style="fill:#000000;stroke:#000000;stroke-width:0.71901649px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+    </g>
+    <rect
+       style="fill:none;stroke:none"
+       id="rect3769"
+       width="40"
+       height="40"
+       x="2.6406245"
+       y="991.49402" />
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
+       x="-1036.3622"
+       y="16"
+       id="text3848"
+       sodipodi:linespacing="125%"
+       transform="matrix(0,-1,1,0,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3850"
+         x="-1036.3622"
+         y="16"
+         style="font-size:18px">QMS</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3859"
+       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:12px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
+         id="flowRegion3861"><rect
+           id="rect3863"
+           width="75.35714"
+           height="62.142857"
+           x="-9.4642859"
+           y="2.2142856" /></flowRegion><flowPara
+         id="flowPara3865" /></flowRoot>  </g>
+</svg>
diff --git a/src/icons/SaveAllGIS.svg b/src/icons/SaveAllGIS.svg
index e3f4afd..a49d178 100644
--- a/src/icons/SaveAllGIS.svg
+++ b/src/icons/SaveAllGIS.svg
@@ -9,14 +9,14 @@
    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="svg3373"
+   width="64"
+   height="64"
+   id="svg2"
    version="1.1"
    inkscape:version="0.48.4 r9939"
    sodipodi:docname="SaveAllGIS.svg">
   <defs
-     id="defs3375" />
+     id="defs4" />
   <sodipodi:namedview
      id="base"
      pagecolor="#ffffff"
@@ -24,24 +24,27 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="11"
-     inkscape:cx="17.876669"
-     inkscape:cy="30.392307"
+     inkscape:zoom="5.6"
+     inkscape:cx="-19.522074"
+     inkscape:cy="39.059244"
+     inkscape:document-units="px"
      inkscape:current-layer="layer1"
      showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
      inkscape:window-width="1920"
-     inkscape:window-height="996"
+     inkscape:window-height="1012"
      inkscape:window-x="-2"
      inkscape:window-y="-3"
      inkscape:window-maximized="1">
     <inkscape:grid
        type="xygrid"
-       id="grid4212" />
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
   </sodipodi:namedview>
   <metadata
-     id="metadata3378">
+     id="metadata7">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
@@ -53,104 +56,64 @@
     </rdf:RDF>
   </metadata>
   <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
      id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <g
-       id="g4204-5"
-       transform="translate(-12.603178,-7)">
-      <rect
-         y="15.014559"
-         x="20.308897"
-         height="33.607246"
-         width="24.47312"
-         id="rect4006-9-0-5"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.32052755;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path4010-7-5-8"
-         d="m 24.065275,19.49552 16.960344,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:transform-center-y="-1.9999976"
-         inkscape:transform-center-x="-2.567705"
-         inkscape:connector-curvature="0"
-         id="path4010-0-6-2-4"
-         d="m 24.065275,25.09719 16.960344,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:transform-center-y="-2.9999926"
-         inkscape:transform-center-x="0.432295"
-         inkscape:connector-curvature="0"
-         id="path4010-6-2-8-6"
-         d="m 24.065294,30.69876 16.960345,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text3176-9"
-         y="42.65152"
-         x="20.777876"
-         style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
-         xml:space="preserve"><tspan
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
-           y="42.65152"
-           x="20.777876"
-           id="tspan3178-9"
-           sodipodi:role="line">GPX</tspan></text>
-    </g>
+     transform="translate(0,-988.36218)">
+    <path
+       style="fill:none;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 54.930802,1014.9336 c 0,0 -15,1 -22.999999,6 -6.836782,4.273 14.726779,4.2732 10.999999,8 -3.72678,3.7268 -28.376052,2.4145 -32.859374,5.1854 -2.0050044,1.2391 -5.0000012,5 -5.0000012,5"
+       id="path3078"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssc" />
     <rect
        style="fill:none;stroke:none"
-       id="rect3170-3"
-       width="35"
-       height="35"
-       x="15.045455"
-       y="14.318178" />
-    <g
-       id="g4204"
-       transform="translate(-4.6031783,0)">
+       id="rect3769"
+       width="40"
+       height="40"
+       x="16.430801"
+       y="991.85114" />
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3859"
+       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:12px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
+         id="flowRegion3861"><rect
+           id="rect3863"
+           width="75.35714"
+           height="62.142857"
+           x="-9.4642859"
+           y="2.2142856" /></flowRegion><flowPara
+         id="flowPara3865" /></flowRoot>    <g
+       id="g4549"
+       transform="translate(53.392857,-6.25)">
       <rect
-         y="15.014559"
-         x="20.308897"
-         height="33.607246"
-         width="24.47312"
-         id="rect4006-9-0"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.32052755;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path4010-7-5"
-         d="m 24.065275,19.49552 16.960344,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:transform-center-y="-1.9999976"
-         inkscape:transform-center-x="-2.567705"
-         inkscape:connector-curvature="0"
-         id="path4010-0-6-2"
-         d="m 24.065275,25.09719 16.960344,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:transform-center-y="-2.9999926"
-         inkscape:transform-center-x="0.432295"
-         inkscape:connector-curvature="0"
-         id="path4010-6-2-8"
-         d="m 24.065294,30.69876 16.960345,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text3176"
-         y="42.65152"
-         x="20.777876"
-         style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
-         xml:space="preserve"><tspan
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
-           y="42.65152"
-           x="20.777876"
-           id="tspan3178"
-           sodipodi:role="line">GPX</tspan></text>
+         y="998.10114"
+         x="-49.82143"
+         height="29.999996"
+         width="30"
+         id="rect3366-5"
+         style="fill:#000080;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         y="1017.6011"
+         x="-44.464287"
+         height="10.499999"
+         width="19.5"
+         id="rect4136-7"
+         style="fill:#cccccc;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         y="1020.2748"
+         x="-40.067711"
+         height="5.0856576"
+         width="3.8534257"
+         id="rect4138-5"
+         style="fill:#000080;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         y="1000.1259"
+         x="-45.793831"
+         height="14.050763"
+         width="21.944799"
+         id="rect4145-7"
+         style="fill:#ececec;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
     </g>
-    <path
-       style="fill:#000080;stroke:#000080;stroke-width:1.44390047px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       d="M 49.384348,48.513913 41.55767,31.792056 49.384348,15.070198 z"
-       id="path4214"
-       inkscape:connector-curvature="0" />
   </g>
 </svg>
diff --git a/src/icons/SaveGIS.svg b/src/icons/SaveGIS.svg
index 25b47b5..4d4818f 100644
--- a/src/icons/SaveGIS.svg
+++ b/src/icons/SaveGIS.svg
@@ -9,14 +9,14 @@
    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="svg3373"
+   width="64"
+   height="64"
+   id="svg2"
    version="1.1"
    inkscape:version="0.48.4 r9939"
    sodipodi:docname="SaveGIS.svg">
   <defs
-     id="defs3375" />
+     id="defs4" />
   <sodipodi:namedview
      id="base"
      pagecolor="#ffffff"
@@ -24,24 +24,27 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="11"
-     inkscape:cx="17.876669"
-     inkscape:cy="30.392307"
+     inkscape:zoom="5.6"
+     inkscape:cx="3.6922115"
+     inkscape:cy="39.059244"
+     inkscape:document-units="px"
      inkscape:current-layer="layer1"
      showgrid="true"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="true"
      inkscape:window-width="1920"
-     inkscape:window-height="1014"
-     inkscape:window-x="-1"
-     inkscape:window-y="-15"
+     inkscape:window-height="1012"
+     inkscape:window-x="-2"
+     inkscape:window-y="-3"
      inkscape:window-maximized="1">
     <inkscape:grid
        type="xygrid"
-       id="grid4212" />
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
   </sodipodi:namedview>
   <metadata
-     id="metadata3378">
+     id="metadata7">
     <rdf:RDF>
       <cc:Work
          rdf:about="">
@@ -53,62 +56,64 @@
     </rdf:RDF>
   </metadata>
   <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
      id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
+     transform="translate(0,-988.36218)">
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3859"
+       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:12px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
+         id="flowRegion3861"><rect
+           id="rect3863"
+           width="75.35714"
+           height="62.142857"
+           x="-9.4642859"
+           y="2.2142856" /></flowRegion><flowPara
+         id="flowPara3865" /></flowRoot>    <path
+       style="fill:none;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 58.323657,1017.7907 c 0,0 -14.999998,1 -22.999997,6 -6.836782,4.273 14.726779,4.2732 10.999999,8 -3.72678,3.7268 -28.376052,2.4145 -32.859374,5.1854 -2.005004,1.2391 -5.0000009,5 -5.0000009,5"
+       id="path3078"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssc" />
     <rect
        style="fill:none;stroke:none"
-       id="rect3170-3"
-       width="35"
-       height="35"
-       x="15.045455"
-       y="14.318178" />
+       id="rect3769"
+       width="40"
+       height="40"
+       x="19.823658"
+       y="994.70831" />
     <g
-       id="g4204"
-       transform="translate(-4.6031783,0)">
+       id="g4549"
+       transform="translate(56.785717,-3.3928571)">
+      <rect
+         y="998.10114"
+         x="-49.82143"
+         height="29.999996"
+         width="30"
+         id="rect3366-5"
+         style="fill:#000080;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         y="1017.6011"
+         x="-44.464287"
+         height="10.499999"
+         width="19.5"
+         id="rect4136-7"
+         style="fill:#cccccc;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         y="1020.2748"
+         x="-40.067711"
+         height="5.0856576"
+         width="3.8534257"
+         id="rect4138-5"
+         style="fill:#000080;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
       <rect
-         y="15.014559"
-         x="20.308897"
-         height="33.607246"
-         width="24.47312"
-         id="rect4006-9-0"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.32052755;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:connector-curvature="0"
-         id="path4010-7-5"
-         d="m 24.065275,19.49552 16.960344,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:transform-center-y="-1.9999976"
-         inkscape:transform-center-x="-2.567705"
-         inkscape:connector-curvature="0"
-         id="path4010-0-6-2"
-         d="m 24.065275,25.09719 16.960344,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         inkscape:transform-center-y="-2.9999926"
-         inkscape:transform-center-x="0.432295"
-         inkscape:connector-curvature="0"
-         id="path4010-6-2-8"
-         d="m 24.065294,30.69876 16.960345,0"
-         style="fill:none;stroke:#000080;stroke-width:1.32052755;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <text
-         sodipodi:linespacing="125%"
-         id="text3176"
-         y="42.65152"
-         x="20.777876"
-         style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
-         xml:space="preserve"><tspan
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
-           y="42.65152"
-           x="20.777876"
-           id="tspan3178"
-           sodipodi:role="line">GPX</tspan></text>
+         y="1000.1259"
+         x="-45.793831"
+         height="14.050763"
+         width="21.944799"
+         id="rect4145-7"
+         style="fill:#ececec;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
     </g>
-    <path
-       style="fill:#000080;stroke:#000080;stroke-width:1.44390047px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
-       d="M 49.384348,48.513913 41.55767,31.792056 49.384348,15.070198 z"
-       id="path4214"
-       inkscape:connector-curvature="0" />
   </g>
 </svg>
diff --git a/src/icons/SaveGISAs.svg b/src/icons/SaveGISAs.svg
new file mode 100644
index 0000000..3bf6799
--- /dev/null
+++ b/src/icons/SaveGISAs.svg
@@ -0,0 +1,152 @@
+<?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="64"
+   height="64"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="SaveGISAs.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.49497475"
+     inkscape:cx="-253.13768"
+     inkscape:cy="189.49637"
+     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,-988.36218)">
+    <path
+       style="fill:none;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 56.537945,1016.3229 c 0,0 -15,1 -22.999999,6 -6.836782,4.273 14.726779,4.2732 10.999999,8 -3.72678,3.7268 -28.376052,2.4145 -32.859375,5.1854 -2.0050037,1.2391 -5.0000005,5 -5.0000005,5"
+       id="path3078"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssc" />
+    <rect
+       style="fill:none;stroke:none"
+       id="rect3769"
+       width="40"
+       height="40"
+       x="18.037945"
+       y="993.24042" />
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3859"
+       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:12px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
+         id="flowRegion3861"><rect
+           id="rect3863"
+           width="75.35714"
+           height="62.142857"
+           x="-9.4642859"
+           y="2.2142856" /></flowRegion><flowPara
+         id="flowPara3865" /></flowRoot>    <g
+       id="g4570"
+       transform="translate(0,-1.2413321)">
+      <rect
+         y="993.10114"
+         x="5.1785688"
+         height="29.999996"
+         width="30"
+         id="rect3366"
+         style="fill:#000080;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         y="1012.6011"
+         x="10.535714"
+         height="10.499999"
+         width="19.5"
+         id="rect4136"
+         style="fill:#cccccc;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         y="1015.2748"
+         x="14.932288"
+         height="5.0856576"
+         width="3.8534257"
+         id="rect4138"
+         style="fill:#000080;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <rect
+         y="995.12585"
+         x="9.2061701"
+         height="14.050763"
+         width="21.944799"
+         id="rect4145"
+         style="fill:#ececec;fill-opacity:1;stroke:#0000ff;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
+    </g>
+    <g
+       id="g4576"
+       transform="matrix(1.5329038,0,0,1.6343352,-30.928639,-623.91809)">
+      <g
+         transform="translate(69.522529,965.1479)"
+         id="g3856">
+        <path
+           inkscape:connector-curvature="0"
+           id="path3828"
+           d="m -23.809459,52.661657 c -0.04491,-2.475537 -0.08983,-4.951075 -0.134742,-7.426612 1.975921,-5.428799 3.951843,-10.857598 5.927764,-16.286397 1.032875,-0.238862 2.065749,-0.477724 3.098624,-0.716586 0.63769,0.846898 1.27538,1.693795 1.91307,2.540693 -1.975921,5.428799 -3.951843,10.857598 -5.927764,16.286397 -1.625651,1.867502 -3.251301,3.735003 -4.876952,5.602505 z"
+           style="fill:none;stroke:#ffffff;stroke-width:3.04031777;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3026"
+           d="m -18.016437,28.948648 c 1.670565,0.608036 3.341129,1.216071 5.011694,1.824107 -1.975921,5.428799 -3.951843,10.857598 -5.927764,16.286397 -1.625651,1.867502 -3.251301,3.735003 -4.876952,5.602505 -0.04491,-2.475537 -0.08983,-4.951075 -0.134742,-7.426612 1.975921,-5.428799 3.951843,-10.857598 5.927764,-16.286397 z"
+           style="fill:#00ff00;stroke:#008000;stroke-width:1.52015889px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3032"
+           d="m -23.809459,52.661657 c -0.04491,-2.475537 -0.08983,-4.951075 -0.134742,-7.426612 1.032875,-0.238862 2.065749,-0.477724 3.098624,-0.716586 0.63769,0.846898 1.27538,1.693795 1.91307,2.540693 -1.625651,1.867502 -3.251301,3.735003 -4.876952,5.602505 z"
+           style="fill:none;stroke:#000000;stroke-width:1.52015889px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3034"
+           d="m -15.51059,29.860701 c -1.778329,4.885919 -3.556658,9.771839 -5.334987,14.657758"
+           style="fill:none;stroke:#008000;stroke-width:1.52015889px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path3036"
+           d="m -18.016437,28.948648 c 1.032875,-0.238862 2.065749,-0.477724 3.098624,-0.716586 0.63769,0.846898 1.27538,1.693795 1.91307,2.540693 -1.670565,-0.608036 -3.341129,-1.216071 -5.011694,-1.824107 z"
+           style="fill:none;stroke:#008000;stroke-width:1.52015889px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/src/icons/SetEle.svg b/src/icons/SetEle.svg
new file mode 100644
index 0000000..7a3e15d
--- /dev/null
+++ b/src/icons/SetEle.svg
@@ -0,0 +1,164 @@
+<?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="SetEle.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>
+  </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="-55.818182"
+     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">
+    <path
+       style="fill:#000080;stroke:none"
+       d="m 10.795997,49.442844 0,-7.34353 4.937885,0 4.937885,-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
+       id="g3020"
+       transform="translate(86,-5.8181818)">
+      <g
+         id="g3913"
+         transform="matrix(0.25,0,0,0.25,-52.414138,-225.88257)">
+        <path
+           style="fill:#ff0000;stroke:#ff0000;stroke-width:1.34993112;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 16.875788,998.65233 25.339695,10.78737 -28.507157,10.7873 3.167462,-21.57467"
+           id="path3763"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#000000;stroke:#000000;stroke-width:0.71901649px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+           d="m 10.325373,1037.1836 3.609174,-39.39145 3.609174,0 z"
+           id="path3761"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cccc" />
+        <rect
+           style="fill:none;stroke:none"
+           id="rect3769"
+           width="40"
+           height="40"
+           x="9.9636908"
+           y="997.48792" />
+      </g>
+      <path
+         transform="translate(57.567636,22.727274)"
+         sodipodi:open="true"
+         sodipodi:end="6.2789689"
+         sodipodi:start="0"
+         d="m -105,11.5 c 0,1.380712 -1.11929,2.5 -2.5,2.5 -1.38071,0 -2.5,-1.119288 -2.5,-2.5 0,-1.380712 1.11929,-2.5 2.5,-2.5 1.3766,0 2.49417,1.112874 2.49998,2.489459"
+         sodipodi:ry="2.5"
+         sodipodi:rx="2.5"
+         sodipodi:cy="11.5"
+         sodipodi:cx="-107.5"
+         id="path3959"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+    </g>
+    <rect
+       style="fill:none;stroke:none"
+       id="rect3004"
+       width="40"
+       height="40"
+       x="10.547536"
+       y="9.4428444" />
+  </g>
+</svg>
diff --git a/src/icons/Start.svg b/src/icons/Start.svg
new file mode 100644
index 0000000..fd9fa8a
--- /dev/null
+++ b/src/icons/Start.svg
@@ -0,0 +1,111 @@
+<?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="Start.svg">
+  <defs
+     id="defs3515">
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4038"
+         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>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4041"
+         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="9.3702873"
+     inkscape:cy="30.874032"
+     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="grid3006" />
+  </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:#000080;stroke:#000000;stroke-width:1.01764786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 35.00882,20.354429 4.550623,0 0,-9.70925 14.15901,16.90607 -14.15901,17.0763 0,-9.70925 -4.550623,0 0,-14.56387"
+       id="path3052-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc"
+       inkscape:export-filename="/home/oeichler/Code/android/QLandkarteM/QLandkarteM/icons/32x32/next.png"
+       inkscape:export-xdpi="83"
+       inkscape:export-ydpi="83" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#000000"
+       id="path3008"
+       sodipodi:cx="25.5"
+       sodipodi:cy="30.5"
+       sodipodi:rx="5.5"
+       sodipodi:ry="5.5"
+       d="m 31,30.5 a 5.5,5.5 0 1 1 -4.9e-5,-0.02319"
+       sodipodi:start="0"
+       sodipodi:end="6.2789689"
+       sodipodi:open="true"
+       transform="matrix(0.90909091,0,0,0.90909091,1.8181818,-0.09090876)" />
+  </g>
+</svg>
diff --git a/src/icons/UnitSetup.svg b/src/icons/UnitSetup.svg
new file mode 100644
index 0000000..1c2eb64
--- /dev/null
+++ b/src/icons/UnitSetup.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3376"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="UnitSetup.svg">
+  <defs
+     id="defs3378" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="-7.6363635"
+     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="metadata3381">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:#808080;stroke:#000000;stroke-width:0.84843713;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 38.551246,22.060594 -1.618084,0.05316 -0.477481,1.775579 0,0.212014 0.238741,1.510573 -2.25471,0.556533 -0.503977,-1.457558 -0.07944,-0.158998 -1.273239,-1.351575 -1.432395,0.689035 0.265236,1.855091 0.106201,0.158998 0.795757,1.298572 -1.83028,1.431085 -1.034511,-1.113052 -0.159192,-0.132587 -1.724176,-0.715507 -1.034535,1.21906 1.034535,1.590072 0.132552,0.105845 1.273251,0.848046 -1.087551,2.014114 -1.405899,-0.556533 -0.185617,-0.05304 -1.830292,0.05304 -0.477469,1.537069 [...]
+       id="path6034-2-1"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g3781"
+       transform="translate(92.909091,7.6363636)">
+      <g
+         transform="translate(-86.266864,-0.87348986)"
+         id="g3772">
+        <text
+           xml:space="preserve"
+           style="font-size:12px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000080;fill-opacity:1;stroke:#ffffff;font-family:Sans;-inkscape-font-specification:Sans Bold"
+           x="5.6363635"
+           y="15.454546"
+           id="text3016"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3018"
+             x="5.6363635"
+             y="15.454546"
+             style="font-size:18px;fill:#000080;stroke:#ffffff">m</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:12px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000080;fill-opacity:1;stroke:#ffffff;font-family:Sans;-inkscape-font-specification:Sans Bold"
+           x="22.545454"
+           y="33.090912"
+           id="text3020"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3022"
+             x="22.545454"
+             y="33.090912"
+             style="font-size:18px;fill:#000080;stroke:#ffffff">ft</tspan></text>
+        <path
+           style="fill:#000080;stroke:#000080;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 10.363637,32.181818 32.363636,8.5454536"
+           id="path3024"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cc" />
+      </g>
+      <rect
+         y="4.0000014"
+         x="-79.63636"
+         height="40"
+         width="40"
+         id="rect3779"
+         style="fill:none;stroke:none" />
+    </g>
+  </g>
+</svg>
diff --git a/src/icons/WptProx.svg b/src/icons/WptProx.svg
new file mode 100644
index 0000000..8826dfb
--- /dev/null
+++ b/src/icons/WptProx.svg
@@ -0,0 +1,151 @@
+<?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="WptProx.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>
+  </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="-62"
+     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">
+    <g
+       id="g3029">
+      <g
+         transform="translate(3.9999971,1.44e-6)"
+         id="g3024">
+        <path
+           style="fill:#0000ff;stroke:#0000ff;stroke-width:0.65424097;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 25.452924,20.082225 37.356669,25.47591 23.964955,30.86956 25.452924,20.082225"
+           id="path3763"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#000000;stroke:#000000;stroke-width:0.34846967px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+           d="m 22.375757,39.34786 1.695469,-19.695725 1.69547,0 z"
+           id="path3761"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cccc" />
+        <rect
+           style="fill:none;stroke:none"
+           id="rect3769"
+           width="18.790668"
+           height="20"
+           x="22.205851"
+           y="19.500017" />
+      </g>
+      <path
+         transform="matrix(0.93023255,0,0,0.93023256,119.97111,7.1744175)"
+         sodipodi:open="true"
+         sodipodi:end="6.2789689"
+         sodipodi:start="0"
+         d="m -75,24 a 20,20 0 1 1 -1.78e-4,-0.08433"
+         sodipodi:ry="20"
+         sodipodi:rx="20"
+         sodipodi:cy="24"
+         sodipodi:cx="-95"
+         id="path3019"
+         style="fill:none;stroke:#ff0000;stroke-width:3;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/locale/qmapshack_cs.ts b/src/locale/qmapshack_cs.ts
index 3e02b0c..d74cef2 100644
--- a/src/locale/qmapshack_cs.ts
+++ b/src/locale/qmapshack_cs.ts
@@ -79,32 +79,32 @@
 <context>
     <name>CDetailsOvlArea</name>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="130"/>
         <source>Edit name...</source>
         <translation>Upravit název...</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="130"/>
         <source>Enter new waypoint name.</source>
         <translation>Zadat  nový název cestovního bodu.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="222"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="221"/>
         <source><h4>Comment:</h4></source>
         <translation><h4>Poznámka:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="225"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="224"/>
         <source><p>--- no comment ---</p></source>
         <translation><p>--- žádná poznámka ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="232"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="231"/>
         <source><h4>Description:</h4></source>
         <translation><h4>Popis:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="235"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="234"/>
         <source><p>--- no description ---</p></source>
         <translation><p>--- žádný popis ---</p></translation>
     </message>
@@ -112,32 +112,32 @@
 <context>
     <name>CDetailsTrk</name>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="157"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="166"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="169"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="175"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="194"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="196"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="161"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="170"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="173"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="179"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="198"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="200"/>
         <source>%1 %2</source>
         <translation>%1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="219"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="225"/>
         <source><h4>Comment:</h4></source>
         <translation type="unfinished"><h4>Poznámka:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="222"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="228"/>
         <source><p>--- no comment ---</p></source>
         <translation type="unfinished"><p>--- žádná poznámka ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="229"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="235"/>
         <source><h4>Description:</h4></source>
         <translation type="unfinished"><h4>Popis:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="232"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="238"/>
         <source><p>--- no description ---</p></source>
         <translation type="unfinished"><p>--- žádný popis ---</p></translation>
     </message>
@@ -145,47 +145,54 @@
 <context>
     <name>CDetailsWpt</name>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="120"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="130"/>
         <source><h4>Comment:</h4></source>
         <translation><h4>Poznámka:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="123"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="133"/>
         <source><p>--- no comment ---</p></source>
         <translation><p>--- žádná poznámka ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="130"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="140"/>
         <source><h4>Description:</h4></source>
         <translation><h4>Popis:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="133"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="143"/>
         <source><p>--- no description ---</p></source>
         <translation><p>--- žádný popis ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="163"/>
         <source>Edit name...</source>
         <translation>Upravit název...</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="163"/>
         <source>Enter new waypoint name.</source>
         <translation>Zadat nový cestovní bod.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="176"/>
         <source>Enter new elevation.</source>
-        <translation>Zadat novou výšku.</translation>
+        <translation type="obsolete">Zadat novou výšku.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="185"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="182"/>
         <source>Enter new proximity range.</source>
         <translation>Zadat nový rozsah blízkosti.</translation>
     </message>
 </context>
 <context>
+    <name>CElevationDialog</name>
+    <message>
+        <location filename="../helpers/CElevationDialog.cpp" line="85"/>
+        <source>No DEM data found for that point.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CGisListWks</name>
     <message>
         <location filename="../gis/CGisListWks.cpp" line="39"/>
@@ -269,12 +276,12 @@
 <context>
     <name>CMainWindow</name>
     <message>
-        <location filename="../CMainWindow.cpp" line="431"/>
+        <location filename="../CMainWindow.cpp" line="436"/>
         <source>Ele: %1%2</source>
         <translation>Výška: %1%2</translation>
     </message>
     <message>
-        <location filename="../CMainWindow.cpp" line="532"/>
+        <location filename="../CMainWindow.cpp" line="545"/>
         <source>Load GIS Data...</source>
         <translation>Nahrát data GIS...</translation>
     </message>
@@ -1558,91 +1565,91 @@ není platným vymezením soustavy souřadnic
         <translation>Formulář</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="46"/>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="67"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="56"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="77"/>
         <source>-
 -</source>
         <translation>-
 -</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="217"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="237"/>
         <source>Profile</source>
         <translation>Profil</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="224"/>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="350"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="244"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="370"/>
         <source>Speed</source>
         <translation>Rychlost</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="231"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="251"/>
         <source>Progress</source>
         <translation>Postup</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="174"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="194"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="282"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="302"/>
         <source>Points</source>
         <translation type="unfinished">Body</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="330"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="350"/>
         <source>Time</source>
         <translation>Čas</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="335"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="355"/>
         <source>Ele.</source>
         <translation>Výška</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="340"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="360"/>
         <source>Delta</source>
         <translation>Rozdíl</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="345"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="365"/>
         <source>Dist.</source>
         <translation>Vzdál.</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="355"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="375"/>
         <source>Slope</source>
         <translation>Sklon</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="360"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="380"/>
         <source>Ascend</source>
         <translation>Stoupání</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="365"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="385"/>
         <source>Descend</source>
         <translation>Klesání</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="370"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="390"/>
         <source>Position</source>
         <translation>Poloha</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="136"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="156"/>
         <source>Info</source>
         <translation>Informace</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="253"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="273"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="379"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="399"/>
         <source>Hist.</source>
         <translation>Hist.</translation>
     </message>
@@ -1655,52 +1662,80 @@ není platným vymezením soustavy souřadnic
         <translation>Dialog</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="227"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="253"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="121"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="242"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="49"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="155"/>
         <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"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="72"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="83"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="162"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="188"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="214"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="69"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="175"/>
         <source>Ele.</source>
         <translation>Výška</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="95"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="201"/>
         <source>Proximity:</source>
         <translation>Blízkost:</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="208"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="102"/>
         <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>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="224"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="118"/>
         <source><html><head/><body><p>Read Only Mode</p></body></html></source>
         <translation><html><head/><body><p>Režim pouze pro čtení</p></body></html></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="148"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="65"/>
         <source>Date/Time:</source>
         <translation>Datum/Čas</translation>
     </message>
 </context>
 <context>
+    <name>IElevationDialog</name>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="14"/>
+        <source>Edit elevation...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="22"/>
+        <source>Elevation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="32"/>
+        <source>-</source>
+        <translation type="unfinished">-</translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="39"/>
+        <source>Get elevation from active digital elevation model.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="42"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
     <name>IGisWidget</name>
     <message>
         <location filename="../gis/IGisWidget.ui" line="14"/>
@@ -1790,171 +1825,176 @@ není platným vymezením soustavy souřadnic
         <translation>Pohled</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="88"/>
+        <location filename="../IMainWindow.ui" line="89"/>
         <source>Window</source>
         <translation>Okno</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="93"/>
+        <location filename="../IMainWindow.ui" line="94"/>
         <source>?</source>
         <translation>Otázka</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="100"/>
+        <location filename="../IMainWindow.ui" line="101"/>
         <source>Project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="118"/>
+        <location filename="../IMainWindow.ui" line="119"/>
         <source>Maps</source>
         <translation>Mapy</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="155"/>
+        <location filename="../IMainWindow.ui" line="156"/>
         <source>Dig. Elev. Model (DEM)</source>
         <translation>Digitální výškový model (DEM)</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="188"/>
+        <location filename="../IMainWindow.ui" line="189"/>
         <source>Data</source>
         <translation>Data</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="201"/>
+        <location filename="../IMainWindow.ui" line="202"/>
         <source>Add Map Workspace</source>
         <translation>Přidat pracovní oblast mapy</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="204"/>
+        <location filename="../IMainWindow.ui" line="205"/>
         <source>Ctrl+T</source>
         <translation>Ctrl+T</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="216"/>
+        <location filename="../IMainWindow.ui" line="217"/>
         <source>Show Scale</source>
         <translation>Ukázat měřítko</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="225"/>
+        <location filename="../IMainWindow.ui" line="226"/>
         <source>Setup Map Font</source>
         <translation>Nastavit písmo mapy</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="237"/>
+        <location filename="../IMainWindow.ui" line="238"/>
         <source>Show Grid</source>
         <translation>Ukázat mřížku</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="240"/>
+        <location filename="../IMainWindow.ui" line="241"/>
         <source>Ctrl+G</source>
         <translation>Ctrl+G</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="249"/>
+        <location filename="../IMainWindow.ui" line="250"/>
         <source>Setup Grid</source>
         <translation>Nastavit mřížku</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="252"/>
+        <location filename="../IMainWindow.ui" line="253"/>
         <source>Ctrl+Alt+G</source>
         <translation>Ctrl+Alt+G</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="264"/>
+        <location filename="../IMainWindow.ui" line="265"/>
         <source>Flip Mouse Wheel</source>
         <translation>Obrátit kolečko myši</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="273"/>
-        <location filename="../IMainWindow.ui" line="276"/>
+        <location filename="../IMainWindow.ui" line="274"/>
+        <location filename="../IMainWindow.ui" line="277"/>
         <source>Setup Map Paths</source>
         <translation>Nastavit cesty k mapám</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="288"/>
+        <location filename="../IMainWindow.ui" line="289"/>
         <source>POI Text</source>
         <translation>Text POI</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="300"/>
+        <location filename="../IMainWindow.ui" line="301"/>
         <source>Night / Day</source>
         <translation>Noc/Den</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="312"/>
+        <location filename="../IMainWindow.ui" line="313"/>
         <source>Map Tool Tip</source>
         <translation>Rada k nástroji pro mapu</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="321"/>
+        <location filename="../IMainWindow.ui" line="322"/>
         <source>Setup DEM Paths</source>
         <translation>Nastavit cesty k DEM</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="330"/>
+        <location filename="../IMainWindow.ui" line="331"/>
         <source>About</source>
         <translation>O programu</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="339"/>
+        <location filename="../IMainWindow.ui" line="340"/>
         <source>Help</source>
         <translation>Nápověda</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="348"/>
+        <location filename="../IMainWindow.ui" line="349"/>
         <source>Setup Map Workspace</source>
         <translation>Nastavit pracovní oblast mapy</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="357"/>
+        <location filename="../IMainWindow.ui" line="358"/>
         <source>Load GIS Data</source>
         <translation>Nahrát data GIS</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="360"/>
+        <location filename="../IMainWindow.ui" line="361"/>
         <source>Load projects from file</source>
         <translation>Nahrát projekty ze souboru</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="363"/>
+        <location filename="../IMainWindow.ui" line="364"/>
         <source>Ctrl+L</source>
         <translation>Ctrl+L</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="372"/>
+        <location filename="../IMainWindow.ui" line="373"/>
         <source>Save All GIS Data</source>
         <translation>Uložit všechna data GIS</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="375"/>
+        <location filename="../IMainWindow.ui" line="376"/>
         <source>Save all projects in the workspace</source>
         <translation>Uložit všechny projekty v pracovní oblasti</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="378"/>
+        <location filename="../IMainWindow.ui" line="379"/>
         <source>Ctrl+S</source>
         <translation>Ctrl+S</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="387"/>
+        <location filename="../IMainWindow.ui" line="388"/>
         <source>Setup Time Zone</source>
         <translation>Nastavit časové pásmo</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="396"/>
+        <location filename="../IMainWindow.ui" line="397"/>
         <source>Add empty project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="408"/>
+        <location filename="../IMainWindow.ui" line="409"/>
         <source>Search Google</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="417"/>
+        <location filename="../IMainWindow.ui" line="418"/>
         <source>Close all projects</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../IMainWindow.ui" line="427"/>
+        <source>Setup Units</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>IMapList</name>
@@ -2080,12 +2120,12 @@ není platným vymezením soustavy souřadnic
         <translation>Přidat body do dočasné čáry?</translation>
     </message>
     <message>
-        <location filename="../mouse/IMouseEditLine.cpp" line="875"/>
+        <location filename="../mouse/IMouseEditLine.cpp" line="876"/>
         <source>Warning!</source>
         <translation>Varování!</translation>
     </message>
     <message>
-        <location filename="../mouse/IMouseEditLine.cpp" line="875"/>
+        <location filename="../mouse/IMouseEditLine.cpp" line="876"/>
         <source>This will replace all data of the orignal by a simple line of coordinates. All other data will be lost permanently.</source>
         <translation>Tímto budou všechny původní údaje nahrazeny jednoduchou čárou souřadnic. Všechna ostatní data budou trvale ztracena.</translation>
     </message>
@@ -2679,6 +2719,29 @@ nebo
     </message>
 </context>
 <context>
+    <name>IUnitsSetup</name>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="14"/>
+        <source>Setup units...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="22"/>
+        <source>Metric</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="29"/>
+        <source>Imperial</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="36"/>
+        <source>Nautic</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>IWptIconDialog</name>
     <message>
         <location filename="../helpers/IWptIconDialog.ui" line="14"/>
@@ -2699,13 +2762,13 @@ nebo
         <translation>Špatný polohový formát. Musí být: "[N|S] ddd mm.sss [W|E] ddd mm.sss"</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="72"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="81"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="60"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="69"/>
         <source>Failed to read...</source>
         <translation>Nepodařilo se přečíst...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="72"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="60"/>
         <source>Failed to read: %1
 line %2, column %3:
  %4</source>
@@ -2714,163 +2777,191 @@ line %2, column %3:
 %4</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="81"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="69"/>
         <source>Not a GPX file: </source>
         <translation>Není souborem GPX: </translation>
     </message>
     <message>
-        <location filename="../gis/IGisProject.cpp" line="94"/>
+        <location filename="../gis/IGisProject.cpp" line="141"/>
         <source>Are you sure you want to delete '%1' from project '%2'?</source>
         <translation>Jste si jistý, že chcete smazat '%1' z projektu '%2'?</translation>
     </message>
     <message>
-        <location filename="../gis/IGisProject.cpp" line="95"/>
+        <location filename="../gis/IGisProject.cpp" line="142"/>
         <source>Delete...</source>
         <translation>Smazat...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="331"/>
+        <location filename="../gis/bin/CBinProject.cpp" line="35"/>
+        <location filename="../gis/bin/CBinProject.cpp" line="121"/>
+        <source>Failed to open...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/bin/CBinProject.cpp" line="35"/>
+        <location filename="../gis/bin/CBinProject.cpp" line="121"/>
+        <source>Failed to open %1</source>
+        <translation type="unfinished">Nepodařilo se otevřít %1</translation>
+    </message>
+    <message>
+        <location filename="../gis/bin/CBinProject.cpp" line="77"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="145"/>
         <source>Save GIS data to...</source>
         <translation>Uložit data GIS do...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="383"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="215"/>
         <source>File exists ...</source>
         <translation>Soubor existuje...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="384"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="216"/>
         <source>The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file.  Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b></source>
         <translation>Soubor existuje a nebyl vytvořen programem QMapShack. Pokud stisknete Ano, budou všechna data v tomto souboru ztracena. I když by tento soubor obsahoval data GPX a byl nahrán programem QMapShack, QMapShack nemusí být schopen nahrát a uložit všechny prvky tohoto souboru.  Tyto prvky budou ztraceny. Doporučuje se použít jiný soubor. <b>Opravdu chcete soubor přepsat?</b></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="450"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="460"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="282"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="292"/>
         <source>Saveing GIS data failed...</source>
         <translation>Nepodařilo se uložit data GIS...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="450"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="282"/>
         <source>Failed to create file '%1'</source>
         <translation>Nepodařilo se vytvořit soubor '%1'</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="460"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="292"/>
         <source>Failed to write file '%1'</source>
         <translation>Nepodařilo se zapsat soubor '%1'</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="182"/>
+        <location filename="../gis/IGisItem.cpp" line="196"/>
+        <source>Initial version.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/IGisItem.cpp" line="269"/>
         <source>This element is probably read-only because it was not created within QMapShack. Usually you should not want to change imported data. But if you think that is ok press'Ok'.</source>
         <translation>Tento prvek je pravděpodobně pouze pro čtení, protože nebyl vytvořen v programu QMapShack. Obvykle nemáte zájem měnit zavedená data. Ale pokud si myslíte, že je to tentokrát na místě, stiskněte OK.</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="183"/>
+        <location filename="../gis/IGisItem.cpp" line="270"/>
         <source>Read Only Mode...</source>
         <translation>Režim pouze pro čtení...</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="338"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="343"/>
         <source>Length: %1 %2</source>
         <translation>Délka: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="345"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="350"/>
         <source>, %1%2 %3, %4%5 %6</source>
         <translation>, %1%2 %3, %4%5 %6</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="358"/>
         <source>Time: %1</source>
         <translation>Čas: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="356"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="366"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="361"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="371"/>
         <source>, Speed: %1 %2</source>
         <translation>, Rychlost: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="363"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="368"/>
         <source>Moving: %1</source>
         <translation>Pohyb: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="372"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
         <source>Start: %1</source>
         <translation>Začátek: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="382"/>
         <source>End: %1</source>
         <translation>Konec: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="381"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="386"/>
         <source>Points: %1 (%2)</source>
         <translation>Body: %1 (%2)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="447"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="452"/>
         <source>Ele.: %1 %2</source>
         <translation>Výška: %1 %2</translation>
     </message>
     <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="967"/>
+        <source>Hide points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1001"/>
+        <source>Show points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source> slope: %1°(%2%)</source>
         <translation type="obsolete"> sklon: %1°(%2%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="455"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="460"/>
         <source> speed: %1%2</source>
         <translation> rychlost: %1%2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="467"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="472"/>
         <source>Ascend: %1%2 (%3%)</source>
         <translation>Stoupání: %1%2 (%3%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="471"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="476"/>
         <source>Ascend: - (-)</source>
         <translation>Stoupání: - (-)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="481"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="486"/>
         <source> Descend: - (-) </source>
         <translation> Klesání: - (-) </translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="502"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="507"/>
         <source> Moving: - (-) </source>
         <translation> Pohyb: - (-) </translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="477"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="482"/>
         <source> Descend: %1%2 (%3%)</source>
         <translation> Klesání: %1%2 (%3%) </translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="261"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="266"/>
         <source>Changed trackpoints, sacrificed all previous data.</source>
         <translation>Změněny body stop. Obětována veškerá předchozí data.</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="450"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="455"/>
         <source> slope: %1° (%2%)</source>
         <translation> sklon: %1° (%2%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="488"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="493"/>
         <source>Dist.: %1%2 (%3%)</source>
         <translation>Vzdálenost: %1%2 (%3%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="492"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="497"/>
         <source>Dist.: - (-)</source>
         <translation>Vzdálenost: - (-)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="498"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="503"/>
         <source> Moving: %1%2 (%3%)</source>
         <translation> Pohyb: %1%2 (%3%) </translation>
     </message>
@@ -2895,124 +2986,124 @@ line %2, column %3:
         <translation>Silný</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="485"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="430"/>
         <source>Changed area shape.</source>
         <translation>Změněn tvar oblasti.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="492"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="437"/>
         <source>Changed name.</source>
         <translation>Změněn název.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="498"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="443"/>
         <source>Changed border width.</source>
         <translation>Změněna šířka okraje.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="504"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="449"/>
         <source>Changed fill pattern.</source>
         <translation>Změněn vzor výplně.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="510"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="455"/>
         <source>Changed opacity.</source>
         <translation>Změněna neprůhlednost.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="516"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="461"/>
         <source>Changed comment.</source>
         <translation>Změněna poznámka.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="522"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="467"/>
         <source>Changed description.</source>
         <translation>Změněn popis.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="534"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1401"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="479"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1312"/>
         <source>Changed color</source>
         <translation>Změněná barva</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="240"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="229"/>
         <source>Elevation: %1 %2</source>
         <translation>Výška: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="248"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="237"/>
         <source>Proximity: %1 %2</source>
         <translation>Blízkost: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1378"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="313"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="302"/>
         <source>Changed name</source>
         <translation>Změněný název</translation>
     </message>
     <message>
         <location filename="../gis/CGisListWks.cpp" line="555"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="918"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="944"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="991"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1115"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="829"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="847"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="894"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1026"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="183"/>
         <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
         <source>Edit name...</source>
         <translation>Upravit název...</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="183"/>
         <source>Enter new waypoint name.</source>
         <translation>Zadat nový název pro cestovní bod.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="320"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="309"/>
         <source>Changed position</source>
         <translation>Změněná poloha</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="326"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="315"/>
         <source>Changed elevation</source>
         <translation>Změněná výška</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="332"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="321"/>
         <source>Changed proximity</source>
         <translation>Změněná blízkost</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="340"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="334"/>
         <source>Changed icon</source>
         <translation>Změněná ikona</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1384"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="346"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1295"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="340"/>
         <source>Changed comment</source>
         <translation>Změněná poznámka</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1390"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="352"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1301"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="346"/>
         <source>Changed description</source>
         <translation>Změněný popis</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="395"/>
+        <location filename="../gis/gpx/serialization.cpp" line="515"/>
         <source>Archived</source>
         <translation>Archivováno</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="399"/>
+        <location filename="../gis/gpx/serialization.cpp" line="519"/>
         <source>Available</source>
         <translation>Dostupné</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="403"/>
+        <location filename="../gis/gpx/serialization.cpp" line="523"/>
         <source>Not Available</source>
         <translation>Nedostupné</translation>
     </message>
@@ -3034,15 +3125,19 @@ line %2, column %3:
     </message>
     <message>
         <location filename="../gis/CGisListWks.cpp" line="555"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="918"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="944"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="991"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1115"/>
-        <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="829"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="847"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="894"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1026"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
         <source>Enter new track name.</source>
         <translation>Zadat název nové stopy.</translation>
     </message>
+    <message>
+        <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
+        <source>Enter new area name.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
diff --git a/src/locale/qmapshack_de.ts b/src/locale/qmapshack_de.ts
index 0f620c9..26d1966 100644
--- a/src/locale/qmapshack_de.ts
+++ b/src/locale/qmapshack_de.ts
@@ -83,32 +83,32 @@
 <context>
     <name>CDetailsOvlArea</name>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="130"/>
         <source>Edit name...</source>
         <translation>Name ändern...</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="130"/>
         <source>Enter new waypoint name.</source>
         <translation>Geben Sie einen neuen Namen ein.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="222"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="221"/>
         <source><h4>Comment:</h4></source>
         <translation><h4>Kommentar:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="225"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="224"/>
         <source><p>--- no comment ---</p></source>
         <translation><p>--- kein Kommentar ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="232"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="231"/>
         <source><h4>Description:</h4></source>
         <translation><h4>Beschreibung:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="235"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="234"/>
         <source><p>--- no description ---</p></source>
         <translation><p>--- keine Beschreibung ---</p></translation>
     </message>
@@ -116,32 +116,32 @@
 <context>
     <name>CDetailsTrk</name>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="157"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="166"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="169"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="175"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="194"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="196"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="161"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="170"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="173"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="179"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="198"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="200"/>
         <source>%1 %2</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="219"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="225"/>
         <source><h4>Comment:</h4></source>
         <translation><h4>Kommentar:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="222"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="228"/>
         <source><p>--- no comment ---</p></source>
         <translation><p>--- kein Kommentar ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="229"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="235"/>
         <source><h4>Description:</h4></source>
         <translation><h4>Beschreibung:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="232"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="238"/>
         <source><p>--- no description ---</p></source>
         <translation><p>--- keine Beschreibung ---</p></translation>
     </message>
@@ -157,47 +157,54 @@
         <translation type="obsolete">keine Beschreibung vorhanden</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="120"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="130"/>
         <source><h4>Comment:</h4></source>
         <translation><h4>Kommentar:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="123"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="133"/>
         <source><p>--- no comment ---</p></source>
         <translation><p>--- kein Kommentar ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="130"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="140"/>
         <source><h4>Description:</h4></source>
         <translation><h4>Beschreibung:</h4></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="133"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="143"/>
         <source><p>--- no description ---</p></source>
         <translation><p>--- keine Beschreibung ---</p></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="163"/>
         <source>Edit name...</source>
         <translation>Name ändern...</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="163"/>
         <source>Enter new waypoint name.</source>
         <translation>Geben Sie einen neuen Namen ein.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="176"/>
         <source>Enter new elevation.</source>
-        <translation>Geben Sie eine Höhe ein.</translation>
+        <translation type="obsolete">Geben Sie eine Höhe ein.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="185"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="182"/>
         <source>Enter new proximity range.</source>
         <translation>Geben Sie einen Abstandsalarm ein.</translation>
     </message>
 </context>
 <context>
+    <name>CElevationDialog</name>
+    <message>
+        <location filename="../helpers/CElevationDialog.cpp" line="85"/>
+        <source>No DEM data found for that point.</source>
+        <translation>Keine Höhendaten für den Punkt gefunden.</translation>
+    </message>
+</context>
+<context>
     <name>CGisListWks</name>
     <message>
         <location filename="../gis/CGisListWks.cpp" line="40"/>
@@ -285,12 +292,12 @@
 <context>
     <name>CMainWindow</name>
     <message>
-        <location filename="../CMainWindow.cpp" line="431"/>
+        <location filename="../CMainWindow.cpp" line="436"/>
         <source>Ele: %1%2</source>
         <translation>Höhe: %1%2</translation>
     </message>
     <message>
-        <location filename="../CMainWindow.cpp" line="532"/>
+        <location filename="../CMainWindow.cpp" line="545"/>
         <source>Load GIS Data...</source>
         <translation>Lade GIS Daten...</translation>
     </message>
@@ -1605,92 +1612,92 @@ ist keine gültige Koordinatensystemdefinition:
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="46"/>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="67"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="56"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="77"/>
         <source>-
 -</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="217"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="237"/>
         <source>Profile</source>
         <translation>Profil</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="224"/>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="350"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="244"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="370"/>
         <source>Speed</source>
         <translation>Geschw.</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="231"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="251"/>
         <source>Progress</source>
         <translatorcomment>?</translatorcomment>
         <translation>Verlauf</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="174"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="194"/>
         <source>...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="282"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="302"/>
         <source>Points</source>
         <translation>Punkte</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="330"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="350"/>
         <source>Time</source>
         <translation>Zeit</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="335"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="355"/>
         <source>Ele.</source>
         <translation>Höhe</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="340"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="360"/>
         <source>Delta</source>
         <translatorcomment>?</translatorcomment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="345"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="365"/>
         <source>Dist.</source>
         <translation>Entf.</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="355"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="375"/>
         <source>Slope</source>
         <translation>Neigung</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="360"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="380"/>
         <source>Ascend</source>
         <translation>Anstieg</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="365"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="385"/>
         <source>Descend</source>
         <translation>Abstieg</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="370"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="390"/>
         <source>Position</source>
         <translation>Position</translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="136"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="156"/>
         <source>Info</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="253"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="273"/>
         <source>-</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="379"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="399"/>
         <source>Hist.</source>
         <translation>Hist.</translation>
     </message>
@@ -1711,13 +1718,13 @@ ist keine gültige Koordinatensystemdefinition:
         <translation type="obsolete"><html><head/><body><p>Kommentar bearbeiten.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="227"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="253"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="121"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="242"/>
         <source>...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="208"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="102"/>
         <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>
@@ -1726,41 +1733,69 @@ ist keine gültige Koordinatensystemdefinition:
         <translation type="obsolete"><html><head/><body><p>Beschreibung bearbeiten.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="49"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="155"/>
         <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"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="72"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="83"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="162"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="188"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="214"/>
         <source>-</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="69"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="175"/>
         <source>Ele.</source>
         <translation>Höhe</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="95"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="201"/>
         <source>Proximity:</source>
         <translation>Abstand:</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="224"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="118"/>
         <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"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="65"/>
         <source>Date/Time:</source>
         <translation>Datum/Zeit:</translation>
     </message>
 </context>
 <context>
+    <name>IElevationDialog</name>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="14"/>
+        <source>Edit elevation...</source>
+        <translation>Höhe ändern ...</translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="22"/>
+        <source>Elevation</source>
+        <translation>Höhe</translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="32"/>
+        <source>-</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="39"/>
+        <source>Get elevation from active digital elevation model.</source>
+        <translation>Die aus dem aktiven Höhenmodell lesen.</translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="42"/>
+        <source>...</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
     <name>IGisWidget</name>
     <message>
         <location filename="../gis/IGisWidget.ui" line="14"/>
@@ -1850,171 +1885,176 @@ ist keine gültige Koordinatensystemdefinition:
         <translation>Ansicht</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="88"/>
+        <location filename="../IMainWindow.ui" line="89"/>
         <source>Window</source>
         <translation>Fenster</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="93"/>
+        <location filename="../IMainWindow.ui" line="94"/>
         <source>?</source>
         <translation>?</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="100"/>
+        <location filename="../IMainWindow.ui" line="101"/>
         <source>Project</source>
         <translation>Projekt</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="118"/>
+        <location filename="../IMainWindow.ui" line="119"/>
         <source>Maps</source>
         <translation>Karten</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="155"/>
+        <location filename="../IMainWindow.ui" line="156"/>
         <source>Dig. Elev. Model (DEM)</source>
         <translation>Höhenmodell (DEM)</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="188"/>
+        <location filename="../IMainWindow.ui" line="189"/>
         <source>Data</source>
         <translation>Daten</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="201"/>
+        <location filename="../IMainWindow.ui" line="202"/>
         <source>Add Map Workspace</source>
         <translation>Ansicht hinzufügen</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="204"/>
+        <location filename="../IMainWindow.ui" line="205"/>
         <source>Ctrl+T</source>
         <translation>Crtl+T</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="216"/>
+        <location filename="../IMainWindow.ui" line="217"/>
         <source>Show Scale</source>
         <translation>Maßstab</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="225"/>
+        <location filename="../IMainWindow.ui" line="226"/>
         <source>Setup Map Font</source>
         <translation>Kartenfont einstellen</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="237"/>
+        <location filename="../IMainWindow.ui" line="238"/>
         <source>Show Grid</source>
         <translation>Gitter</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="240"/>
+        <location filename="../IMainWindow.ui" line="241"/>
         <source>Ctrl+G</source>
         <translation>Crtl+G</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="249"/>
+        <location filename="../IMainWindow.ui" line="250"/>
         <source>Setup Grid</source>
         <translation>Gitter einstellen</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="252"/>
+        <location filename="../IMainWindow.ui" line="253"/>
         <source>Ctrl+Alt+G</source>
         <translation>Ctrl+Alt+G</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="264"/>
+        <location filename="../IMainWindow.ui" line="265"/>
         <source>Flip Mouse Wheel</source>
         <translation>Mausrad umdrehen</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="273"/>
-        <location filename="../IMainWindow.ui" line="276"/>
+        <location filename="../IMainWindow.ui" line="274"/>
+        <location filename="../IMainWindow.ui" line="277"/>
         <source>Setup Map Paths</source>
         <translation>Kartenverzeichnisse angeben</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="288"/>
+        <location filename="../IMainWindow.ui" line="289"/>
         <source>POI Text</source>
         <translation>POI Text</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="300"/>
+        <location filename="../IMainWindow.ui" line="301"/>
         <source>Night / Day</source>
         <translation>Nacht / Tag</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="312"/>
+        <location filename="../IMainWindow.ui" line="313"/>
         <source>Map Tool Tip</source>
         <translation>Kartentooltip</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="321"/>
+        <location filename="../IMainWindow.ui" line="322"/>
         <source>Setup DEM Paths</source>
         <translation>DEM Verzeichnisse angeben</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="330"/>
+        <location filename="../IMainWindow.ui" line="331"/>
         <source>About</source>
         <translation>Über</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="339"/>
+        <location filename="../IMainWindow.ui" line="340"/>
         <source>Help</source>
         <translation>Hilfe</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="348"/>
+        <location filename="../IMainWindow.ui" line="349"/>
         <source>Setup Map Workspace</source>
         <translation>Kartenansicht einstellen</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="357"/>
+        <location filename="../IMainWindow.ui" line="358"/>
         <source>Load GIS Data</source>
         <translation>GIS Daten laden</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="360"/>
+        <location filename="../IMainWindow.ui" line="361"/>
         <source>Load projects from file</source>
         <translation>Lade Datei als Projekt</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="363"/>
+        <location filename="../IMainWindow.ui" line="364"/>
         <source>Ctrl+L</source>
         <translation>Ctrl+L</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="372"/>
+        <location filename="../IMainWindow.ui" line="373"/>
         <source>Save All GIS Data</source>
         <translation>Alle GIS Daten speichern</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="375"/>
+        <location filename="../IMainWindow.ui" line="376"/>
         <source>Save all projects in the workspace</source>
         <translation>Alle Projekte im Arbeitsplatz speichern</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="378"/>
+        <location filename="../IMainWindow.ui" line="379"/>
         <source>Ctrl+S</source>
         <translation>Ctrl+S</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="387"/>
+        <location filename="../IMainWindow.ui" line="388"/>
         <source>Setup Time Zone</source>
         <translation>Zeitzone einstellen</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="396"/>
+        <location filename="../IMainWindow.ui" line="397"/>
         <source>Add empty project</source>
         <translation>Ein leeres Projekt hinzufügen</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="408"/>
+        <location filename="../IMainWindow.ui" line="409"/>
         <source>Search Google</source>
         <translation>Mit Google suchen</translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="417"/>
+        <location filename="../IMainWindow.ui" line="418"/>
         <source>Close all projects</source>
         <translation>Alle Projekte schließen</translation>
     </message>
+    <message>
+        <location filename="../IMainWindow.ui" line="427"/>
+        <source>Setup Units</source>
+        <translation>Einheiten einstellen</translation>
+    </message>
 </context>
 <context>
     <name>IMapList</name>
@@ -2140,12 +2180,12 @@ ist keine gültige Koordinatensystemdefinition:
         <translation>Punkte zur temporären Linie hinzufügen?</translation>
     </message>
     <message>
-        <location filename="../mouse/IMouseEditLine.cpp" line="875"/>
+        <location filename="../mouse/IMouseEditLine.cpp" line="876"/>
         <source>Warning!</source>
         <translation>Warnung!</translation>
     </message>
     <message>
-        <location filename="../mouse/IMouseEditLine.cpp" line="875"/>
+        <location filename="../mouse/IMouseEditLine.cpp" line="876"/>
         <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>
@@ -2764,6 +2804,29 @@ sein</translation>
     </message>
 </context>
 <context>
+    <name>IUnitsSetup</name>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="14"/>
+        <source>Setup units...</source>
+        <translation>Einheiten einstellen...</translation>
+    </message>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="22"/>
+        <source>Metric</source>
+        <translation>Metrisch</translation>
+    </message>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="29"/>
+        <source>Imperial</source>
+        <translation>Imperial</translation>
+    </message>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="36"/>
+        <source>Nautic</source>
+        <translation>Nautisch</translation>
+    </message>
+</context>
+<context>
     <name>IWptIconDialog</name>
     <message>
         <location filename="../helpers/IWptIconDialog.ui" line="14"/>
@@ -2784,13 +2847,13 @@ sein</translation>
         <translation>Falsches Positionsformat. Richtig: [N|S] ddd mm.sss [W|E] ddd mm.sss </translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="72"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="81"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="60"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="69"/>
         <source>Failed to read...</source>
         <translation>Lesen fehlgeschlagen...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="72"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="60"/>
         <source>Failed to read: %1
 line %2, column %3:
  %4</source>
@@ -2799,153 +2862,176 @@ Zeile %2, Spalte %3:
 %4</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="81"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="69"/>
         <source>Not a GPX file: </source>
         <translation>Keien GPX Datei:</translation>
     </message>
     <message>
-        <location filename="../gis/IGisProject.cpp" line="94"/>
+        <location filename="../gis/IGisProject.cpp" line="141"/>
         <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/IGisProject.cpp" line="95"/>
+        <location filename="../gis/IGisProject.cpp" line="142"/>
         <source>Delete...</source>
         <translation>Löschen...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="331"/>
+        <location filename="../gis/bin/CBinProject.cpp" line="35"/>
+        <location filename="../gis/bin/CBinProject.cpp" line="121"/>
+        <source>Failed to open...</source>
+        <translation>Öffnen fehlgeschlagen...</translation>
+    </message>
+    <message>
+        <location filename="../gis/bin/CBinProject.cpp" line="35"/>
+        <location filename="../gis/bin/CBinProject.cpp" line="121"/>
+        <source>Failed to open %1</source>
+        <translation>Öffnen fehlgeschlagen: %1</translation>
+    </message>
+    <message>
+        <location filename="../gis/bin/CBinProject.cpp" line="77"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="145"/>
         <source>Save GIS data to...</source>
         <translation>GIS Daten speichern in...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="383"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="215"/>
         <source>File exists ...</source>
         <translation>Datei existiert...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="384"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="216"/>
         <source>The file exists and it has not been created by QMapShack. If you press 'yes' all data in this file will be lost. Even if this file contains GPX data and has been loaded by QMapShack, QMapShack might not be able to load and store all elements of this file.  Those elements will be lost. I recommend to use another file. <b>Do you really want to overwrite the file?</b></source>
         <translation>Diese Datei wurde nicht mit QMapShack erstellt. Wenn Sie 'Ja' drücken werden alle Daten dieser Datei gelöscht. Selbst wenn diese Datei GPX Daten enthält und mit QMapShack geladen wurde, können nicht alle Elemente dieser Datei durch QMapShack geladen und gespeichert werden. Diese Elemente sind verloren. Ich empfehle die Nutzung einer anderen Datei. <b>Wollen Sie die Datei wirklich überschreiben?</b></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="450"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="282"/>
         <source>Failed to create file '%1'</source>
         <translation>Datei %1' konnte nicht erstellt werden</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="450"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="460"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="282"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="292"/>
         <source>Saveing GIS data failed...</source>
         <translation>Speichern der GIS DAten fehlgeschlagen...</translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="460"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="292"/>
         <source>Failed to write file '%1'</source>
         <translation>Datei %1' konnte nicht gespeichert werden</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="261"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="266"/>
         <source>Changed trackpoints, sacrificed all previous data.</source>
         <translation>Wegpunkte geändert, alle vorherigen Daten sind verloren.</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="338"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="343"/>
         <source>Length: %1 %2</source>
         <translation>Länge: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="345"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="350"/>
         <source>, %1%2 %3, %4%5 %6</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="358"/>
         <source>Time: %1</source>
         <translation>Zeit: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="356"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="366"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="361"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="371"/>
         <source>, Speed: %1 %2</source>
         <translation>, Geschw.: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="363"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="368"/>
         <source>Moving: %1</source>
         <translation>Bewegung: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="372"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
         <source>Start: %1</source>
         <translation>Beginn: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="382"/>
         <source>End: %1</source>
         <translation>Ende: %1</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="381"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="386"/>
         <source>Points: %1 (%2)</source>
         <translation>Punkte: %1 (%2)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="447"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="452"/>
         <source>Ele.: %1 %2</source>
         <translation>Höhe: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="450"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="455"/>
         <source> slope: %1° (%2%)</source>
         <translation> Neigung: %1° (%2%)</translation>
     </message>
     <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="967"/>
+        <source>Hide points.</source>
+        <translation>Pukte ausblenden.</translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1001"/>
+        <source>Show points.</source>
+        <translation>Punkte anzeigen.</translation>
+    </message>
+    <message>
         <source> slope: %1°(%2%)</source>
         <translation type="obsolete">Neigung: %1°(%2%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="455"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="460"/>
         <source> speed: %1%2</source>
         <translation>Geschwindigkeit: %1%2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="467"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="472"/>
         <source>Ascend: %1%2 (%3%)</source>
         <translation>Anstieg: %1%2 (%3%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="471"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="476"/>
         <source>Ascend: - (-)</source>
         <translation>Anstieg: - (-)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="477"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="482"/>
         <source> Descend: %1%2 (%3%)</source>
         <translation> Abstieg: %1%2 (%3%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="481"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="486"/>
         <source> Descend: - (-) </source>
         <translation> Abstieg: - (-) </translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="488"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="493"/>
         <source>Dist.: %1%2 (%3%)</source>
         <translation>Entf.: %1%2 (%3%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="492"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="497"/>
         <source>Dist.: - (-)</source>
         <translation>Entf.: - (-)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="498"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="503"/>
         <source> Moving: %1%2 (%3%)</source>
         <translation>Bewegung: %1%2 (%3%)</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="502"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="507"/>
         <source> Moving: - (-) </source>
         <translation> Bewegung: - (-) </translation>
     </message>
@@ -2970,124 +3056,124 @@ Zeile %2, Spalte %3:
         <translation>stark</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="485"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="430"/>
         <source>Changed area shape.</source>
         <translation>Flächenform geändert.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="492"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="437"/>
         <source>Changed name.</source>
         <translation>Name geändert.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="498"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="443"/>
         <source>Changed border width.</source>
         <translation>Umrnadungsbreite geändert.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="504"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="449"/>
         <source>Changed fill pattern.</source>
         <translation>Füllung geändert.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="510"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="455"/>
         <source>Changed opacity.</source>
         <translation>Durchsichtigkeit geändert.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="516"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="461"/>
         <source>Changed comment.</source>
         <translation>Kommentar geändert.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="522"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="467"/>
         <source>Changed description.</source>
         <translation>Beschreibung geändert.</translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="534"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1401"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="479"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1312"/>
         <source>Changed color</source>
         <translation>Farbe geändert</translation>
     </message>
     <message>
         <location filename="../gis/CGisListWks.cpp" line="555"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="918"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="944"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="991"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1115"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="829"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="847"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="894"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1026"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="183"/>
         <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
         <source>Edit name...</source>
         <translation>Name ändern...</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="183"/>
         <source>Enter new waypoint name.</source>
         <translation>Geben Sie einen neuen Namen ein.</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="240"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="229"/>
         <source>Elevation: %1 %2</source>
         <translation>Höhe: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="248"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="237"/>
         <source>Proximity: %1 %2</source>
         <translation>Abstand: %1 %2</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1378"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="313"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="302"/>
         <source>Changed name</source>
         <translation>Name geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="320"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="309"/>
         <source>Changed position</source>
         <translation>Position geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="326"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="315"/>
         <source>Changed elevation</source>
         <translation>Höhe geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="332"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="321"/>
         <source>Changed proximity</source>
         <translation>Abstandsalarm geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="340"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="334"/>
         <source>Changed icon</source>
         <translation>Symbol geändert</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1384"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="346"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1295"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="340"/>
         <source>Changed comment</source>
         <translation>Kommentar geändert</translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1390"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="352"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1301"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="346"/>
         <source>Changed description</source>
         <translation>Beschreibung geändert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="395"/>
+        <location filename="../gis/gpx/serialization.cpp" line="515"/>
         <source>Archived</source>
         <translation>Archiviert</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="399"/>
+        <location filename="../gis/gpx/serialization.cpp" line="519"/>
         <source>Available</source>
         <translation>Verfügbar</translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="403"/>
+        <location filename="../gis/gpx/serialization.cpp" line="523"/>
         <source>Not Available</source>
         <translation>Nicht verfügbar</translation>
     </message>
@@ -3108,26 +3194,35 @@ Zeile %2, Spalte %3:
         <translation>Dieser Dateityp hat eine unbekannte Polyline Kodierung. Bitte berichten!</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="182"/>
+        <location filename="../gis/IGisItem.cpp" line="196"/>
+        <source>Initial version.</source>
+        <translation>initiale Version</translation>
+    </message>
+    <message>
+        <location filename="../gis/IGisItem.cpp" line="269"/>
         <source>This element is probably read-only because it was not created within QMapShack. Usually you should not want to change imported data. But if you think that is ok press'Ok'.</source>
         <translation>Diese Element ist vermutlich schreibgeschützt, da nicht mit QMapShack erstellt. Normalerweise sollten importierte Daten nicht geändert werden. Wenn doch, drücken Sie 'OK'.</translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="183"/>
+        <location filename="../gis/IGisItem.cpp" line="270"/>
         <source>Read Only Mode...</source>
         <translation>Schreibgeschützt...</translation>
     </message>
     <message>
         <location filename="../gis/CGisListWks.cpp" line="555"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="918"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="944"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="991"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1115"/>
-        <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="829"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="847"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="894"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1026"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
         <source>Enter new track name.</source>
         <translation>Name eingeben.</translation>
     </message>
+    <message>
+        <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
+        <source>Enter new area name.</source>
+        <translation>Geben Sie einen Namen für das Gebiet an.</translation>
+    </message>
 </context>
 </TS>
diff --git a/src/locale/qmapshack_es.ts b/src/locale/qmapshack_es.ts
index 9439855..7b30882 100644
--- a/src/locale/qmapshack_es.ts
+++ b/src/locale/qmapshack_es.ts
@@ -79,32 +79,32 @@
 <context>
     <name>CDetailsOvlArea</name>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="130"/>
         <source>Edit name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="127"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="130"/>
         <source>Enter new waypoint name.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="222"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="221"/>
         <source><h4>Comment:</h4></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="225"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="224"/>
         <source><p>--- no comment ---</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="232"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="231"/>
         <source><h4>Description:</h4></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="235"/>
+        <location filename="../gis/ovl/CDetailsOvlArea.cpp" line="234"/>
         <source><p>--- no description ---</p></source>
         <translation type="unfinished"></translation>
     </message>
@@ -112,32 +112,32 @@
 <context>
     <name>CDetailsTrk</name>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="157"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="166"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="169"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="175"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="194"/>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="196"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="161"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="170"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="173"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="179"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="198"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="200"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="219"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="225"/>
         <source><h4>Comment:</h4></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="222"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="228"/>
         <source><p>--- no comment ---</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="229"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="235"/>
         <source><h4>Description:</h4></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CDetailsTrk.cpp" line="232"/>
+        <location filename="../gis/trk/CDetailsTrk.cpp" line="238"/>
         <source><p>--- no description ---</p></source>
         <translation type="unfinished"></translation>
     </message>
@@ -145,43 +145,46 @@
 <context>
     <name>CDetailsWpt</name>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="120"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="130"/>
         <source><h4>Comment:</h4></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="123"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="133"/>
         <source><p>--- no comment ---</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="130"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="140"/>
         <source><h4>Description:</h4></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="133"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="143"/>
         <source><p>--- no description ---</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="163"/>
         <source>Edit name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="166"/>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="163"/>
         <source>Enter new waypoint name.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="176"/>
-        <source>Enter new elevation.</source>
+        <location filename="../gis/wpt/CDetailsWpt.cpp" line="182"/>
+        <source>Enter new proximity range.</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>CElevationDialog</name>
     <message>
-        <location filename="../gis/wpt/CDetailsWpt.cpp" line="185"/>
-        <source>Enter new proximity range.</source>
+        <location filename="../helpers/CElevationDialog.cpp" line="85"/>
+        <source>No DEM data found for that point.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -269,12 +272,12 @@
 <context>
     <name>CMainWindow</name>
     <message>
-        <location filename="../CMainWindow.cpp" line="431"/>
+        <location filename="../CMainWindow.cpp" line="436"/>
         <source>Ele: %1%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../CMainWindow.cpp" line="532"/>
+        <location filename="../CMainWindow.cpp" line="545"/>
         <source>Load GIS Data...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1545,90 +1548,90 @@ is not a valid coordinate system definition:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="46"/>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="67"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="56"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="77"/>
         <source>-
 -</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="217"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="237"/>
         <source>Profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="224"/>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="350"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="244"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="370"/>
         <source>Speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="231"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="251"/>
         <source>Progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="174"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="194"/>
         <source>...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="282"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="302"/>
         <source>Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="330"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="350"/>
         <source>Time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="335"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="355"/>
         <source>Ele.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="340"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="360"/>
         <source>Delta</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="345"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="365"/>
         <source>Dist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="355"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="375"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="360"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="380"/>
         <source>Ascend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="365"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="385"/>
         <source>Descend</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="370"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="390"/>
         <source>Position</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="136"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="156"/>
         <source>Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="253"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="273"/>
         <source>-</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/IDetailsTrk.ui" line="379"/>
+        <location filename="../gis/trk/IDetailsTrk.ui" line="399"/>
         <source>Hist.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1641,52 +1644,80 @@ is not a valid coordinate system definition:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="227"/>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="253"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="121"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="242"/>
         <source>...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="49"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="155"/>
         <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"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="72"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="83"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="162"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="188"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="214"/>
         <source>-</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="69"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="175"/>
         <source>Ele.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="95"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="201"/>
         <source>Proximity:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/IDetailsWpt.ui" line="208"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="102"/>
         <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="224"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="118"/>
         <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="148"/>
+        <location filename="../gis/wpt/IDetailsWpt.ui" line="65"/>
         <source>Date/Time:</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>IElevationDialog</name>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="14"/>
+        <source>Edit elevation...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="22"/>
+        <source>Elevation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="32"/>
+        <source>-</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="39"/>
+        <source>Get elevation from active digital elevation model.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../helpers/IElevationDialog.ui" line="42"/>
+        <source>...</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>IGisWidget</name>
     <message>
         <location filename="../gis/IGisWidget.ui" line="14"/>
@@ -1776,171 +1807,176 @@ is not a valid coordinate system definition:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="88"/>
+        <location filename="../IMainWindow.ui" line="89"/>
         <source>Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="93"/>
+        <location filename="../IMainWindow.ui" line="94"/>
         <source>?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="100"/>
+        <location filename="../IMainWindow.ui" line="101"/>
         <source>Project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="118"/>
+        <location filename="../IMainWindow.ui" line="119"/>
         <source>Maps</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="155"/>
+        <location filename="../IMainWindow.ui" line="156"/>
         <source>Dig. Elev. Model (DEM)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="188"/>
+        <location filename="../IMainWindow.ui" line="189"/>
         <source>Data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="201"/>
+        <location filename="../IMainWindow.ui" line="202"/>
         <source>Add Map Workspace</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="204"/>
+        <location filename="../IMainWindow.ui" line="205"/>
         <source>Ctrl+T</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="216"/>
+        <location filename="../IMainWindow.ui" line="217"/>
         <source>Show Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="225"/>
+        <location filename="../IMainWindow.ui" line="226"/>
         <source>Setup Map Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="237"/>
+        <location filename="../IMainWindow.ui" line="238"/>
         <source>Show Grid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="240"/>
+        <location filename="../IMainWindow.ui" line="241"/>
         <source>Ctrl+G</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="249"/>
+        <location filename="../IMainWindow.ui" line="250"/>
         <source>Setup Grid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="252"/>
+        <location filename="../IMainWindow.ui" line="253"/>
         <source>Ctrl+Alt+G</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="264"/>
+        <location filename="../IMainWindow.ui" line="265"/>
         <source>Flip Mouse Wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="273"/>
-        <location filename="../IMainWindow.ui" line="276"/>
+        <location filename="../IMainWindow.ui" line="274"/>
+        <location filename="../IMainWindow.ui" line="277"/>
         <source>Setup Map Paths</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="288"/>
+        <location filename="../IMainWindow.ui" line="289"/>
         <source>POI Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="300"/>
+        <location filename="../IMainWindow.ui" line="301"/>
         <source>Night / Day</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="312"/>
+        <location filename="../IMainWindow.ui" line="313"/>
         <source>Map Tool Tip</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="321"/>
+        <location filename="../IMainWindow.ui" line="322"/>
         <source>Setup DEM Paths</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="330"/>
+        <location filename="../IMainWindow.ui" line="331"/>
         <source>About</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="339"/>
+        <location filename="../IMainWindow.ui" line="340"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="348"/>
+        <location filename="../IMainWindow.ui" line="349"/>
         <source>Setup Map Workspace</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="357"/>
+        <location filename="../IMainWindow.ui" line="358"/>
         <source>Load GIS Data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="360"/>
+        <location filename="../IMainWindow.ui" line="361"/>
         <source>Load projects from file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="363"/>
+        <location filename="../IMainWindow.ui" line="364"/>
         <source>Ctrl+L</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="372"/>
+        <location filename="../IMainWindow.ui" line="373"/>
         <source>Save All GIS Data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="375"/>
+        <location filename="../IMainWindow.ui" line="376"/>
         <source>Save all projects in the workspace</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="378"/>
+        <location filename="../IMainWindow.ui" line="379"/>
         <source>Ctrl+S</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="387"/>
+        <location filename="../IMainWindow.ui" line="388"/>
         <source>Setup Time Zone</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="396"/>
+        <location filename="../IMainWindow.ui" line="397"/>
         <source>Add empty project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="408"/>
+        <location filename="../IMainWindow.ui" line="409"/>
         <source>Search Google</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../IMainWindow.ui" line="417"/>
+        <location filename="../IMainWindow.ui" line="418"/>
         <source>Close all projects</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../IMainWindow.ui" line="427"/>
+        <source>Setup Units</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>IMapList</name>
@@ -2062,12 +2098,12 @@ is not a valid coordinate system definition:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mouse/IMouseEditLine.cpp" line="875"/>
+        <location filename="../mouse/IMouseEditLine.cpp" line="876"/>
         <source>Warning!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../mouse/IMouseEditLine.cpp" line="875"/>
+        <location filename="../mouse/IMouseEditLine.cpp" line="876"/>
         <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>
@@ -2642,6 +2678,29 @@ or
     </message>
 </context>
 <context>
+    <name>IUnitsSetup</name>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="14"/>
+        <source>Setup units...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="22"/>
+        <source>Metric</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="29"/>
+        <source>Imperial</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../units/IUnitsSetup.ui" line="36"/>
+        <source>Nautic</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>IWptIconDialog</name>
     <message>
         <location filename="../helpers/IWptIconDialog.ui" line="14"/>
@@ -2662,162 +2721,185 @@ or
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="72"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="81"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="60"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="69"/>
         <source>Failed to read...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="72"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="60"/>
         <source>Failed to read: %1
 line %2, column %3:
  %4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="81"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="69"/>
         <source>Not a GPX file: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/IGisProject.cpp" line="94"/>
+        <location filename="../gis/IGisProject.cpp" line="141"/>
         <source>Are you sure you want to delete '%1' from project '%2'?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/IGisProject.cpp" line="95"/>
+        <location filename="../gis/IGisProject.cpp" line="142"/>
         <source>Delete...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="331"/>
+        <location filename="../gis/bin/CBinProject.cpp" line="35"/>
+        <location filename="../gis/bin/CBinProject.cpp" line="121"/>
+        <source>Failed to open...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/bin/CBinProject.cpp" line="35"/>
+        <location filename="../gis/bin/CBinProject.cpp" line="121"/>
+        <source>Failed to open %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/bin/CBinProject.cpp" line="77"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="145"/>
         <source>Save GIS data to...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="383"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="215"/>
         <source>File exists ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="384"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="216"/>
         <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/gpx/CGpxProject.cpp" line="450"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="282"/>
         <source>Failed to create file '%1'</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="450"/>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="460"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="282"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="292"/>
         <source>Saveing GIS data failed...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/gpx/CGpxProject.cpp" line="460"/>
+        <location filename="../gis/gpx/CGpxProject.cpp" line="292"/>
         <source>Failed to write file '%1'</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="338"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="343"/>
         <source>Length: %1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="345"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="350"/>
         <source>, %1%2 %3, %4%5 %6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="353"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="358"/>
         <source>Time: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="356"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="366"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="361"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="371"/>
         <source>, Speed: %1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="363"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="368"/>
         <source>Moving: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="372"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
         <source>Start: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="377"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="382"/>
         <source>End: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="381"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="386"/>
         <source>Points: %1 (%2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="447"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="452"/>
         <source>Ele.: %1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="455"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="460"/>
         <source> speed: %1%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="467"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="472"/>
         <source>Ascend: %1%2 (%3%)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="471"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="476"/>
         <source>Ascend: - (-)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="481"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="486"/>
         <source> Descend: - (-) </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="502"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="507"/>
         <source> Moving: - (-) </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="477"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="967"/>
+        <source>Hide points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1001"/>
+        <source>Show points.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="482"/>
         <source> Descend: %1%2 (%3%)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="261"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="266"/>
         <source>Changed trackpoints, sacrificed all previous data.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="450"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="455"/>
         <source> slope: %1° (%2%)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="488"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="493"/>
         <source>Dist.: %1%2 (%3%)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="492"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="497"/>
         <source>Dist.: - (-)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="498"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="503"/>
         <source> Moving: %1%2 (%3%)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2842,124 +2924,124 @@ line %2, column %3:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="485"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="430"/>
         <source>Changed area shape.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="492"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="437"/>
         <source>Changed name.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="498"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="443"/>
         <source>Changed border width.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="504"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="449"/>
         <source>Changed fill pattern.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="510"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="455"/>
         <source>Changed opacity.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="516"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="461"/>
         <source>Changed comment.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="522"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="467"/>
         <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="1401"/>
+        <location filename="../gis/ovl/CGisItemOvlArea.cpp" line="479"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1312"/>
         <source>Changed color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="240"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="229"/>
         <source>Elevation: %1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="248"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="237"/>
         <source>Proximity: %1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1378"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="313"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1289"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="302"/>
         <source>Changed name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../gis/CGisListWks.cpp" line="555"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="918"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="944"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="991"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1115"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="829"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="847"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="894"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1026"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="183"/>
         <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
         <source>Edit name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="194"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="183"/>
         <source>Enter new waypoint name.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="320"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="309"/>
         <source>Changed position</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="326"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="315"/>
         <source>Changed elevation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="332"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="321"/>
         <source>Changed proximity</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="340"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="334"/>
         <source>Changed icon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1384"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="346"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1295"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="340"/>
         <source>Changed comment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1390"/>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="352"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1301"/>
+        <location filename="../gis/wpt/CGisItemWpt.cpp" line="346"/>
         <source>Changed description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="395"/>
+        <location filename="../gis/gpx/serialization.cpp" line="515"/>
         <source>Archived</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="399"/>
+        <location filename="../gis/gpx/serialization.cpp" line="519"/>
         <source>Available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/wpt/CGisItemWpt.cpp" line="403"/>
+        <location filename="../gis/gpx/serialization.cpp" line="523"/>
         <source>Not Available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2980,26 +3062,35 @@ line %2, column %3:
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../gis/IGisItem.cpp" line="182"/>
+        <location filename="../gis/IGisItem.cpp" line="196"/>
+        <source>Initial version.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../gis/IGisItem.cpp" line="269"/>
         <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="183"/>
+        <location filename="../gis/IGisItem.cpp" line="270"/>
         <source>Read Only Mode...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../gis/CGisListWks.cpp" line="555"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="918"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="926"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="944"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="991"/>
-        <location filename="../gis/trk/CGisItemTrk.cpp" line="1115"/>
-        <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="821"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="829"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="847"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="894"/>
+        <location filename="../gis/trk/CGisItemTrk.cpp" line="1026"/>
         <location filename="../mouse/CMouseEditTrk.cpp" line="106"/>
         <source>Enter new track name.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../mouse/CMouseEditArea.cpp" line="100"/>
+        <source>Enter new area name.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
diff --git a/src/mouse/CMouseEditArea.cpp b/src/mouse/CMouseEditArea.cpp
index c34b604..dc77d0b 100644
--- a/src/mouse/CMouseEditArea.cpp
+++ b/src/mouse/CMouseEditArea.cpp
@@ -97,7 +97,7 @@ void CMouseEditArea::slotCopyToNew()
         name = area->getName();
     }
 
-    name = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new track name."), QLineEdit::Normal, name);
+    name = QInputDialog::getText(0, QObject::tr("Edit name..."), QObject::tr("Enter new area name."), QLineEdit::Normal, name);
 
     if(name.isEmpty())
     {
diff --git a/src/mouse/IMouseEditLine.cpp b/src/mouse/IMouseEditLine.cpp
index 6549be1..088c226 100644
--- a/src/mouse/IMouseEditLine.cpp
+++ b/src/mouse/IMouseEditLine.cpp
@@ -60,7 +60,7 @@ IMouseEditLine::IMouseEditLine(IGisLine &src, CGisDraw *gis, CCanvas *parent)
     , idxStop(-1)
 {        
 
-    src.getData(coords1);
+    src.getPolylineFromData(coords1);
     // calculate a pixel polyline from track coordinates
     line = coords1;
     gis->convertRad2Px(line);
@@ -755,9 +755,10 @@ void IMouseEditLine::slotDeleteRange()
     }
     scrOptRange->deleteLater();
 
-    int len = qAbs(idxStop - idxStart) + 1;
+    int len = qAbs(idxStop - idxStart);
     int idx = idxStart < idxStop ? idxStart : idxStop;
-    coords1.remove(idx,len);
+
+    coords1.remove(idx+1,len-1);
     line = coords1;
     gis->convertRad2Px(line);
 
@@ -882,7 +883,7 @@ void IMouseEditLine::slotCopyToOrig()
     IGisLine * l = getGisLine();
     if(l != 0)
     {
-        l->setData(coords1);
+        l->setDataFromPolyline(coords1);
     }
     canvas->resetMouse();
     canvas->slotTriggerCompleteUpdate(CCanvas::eRedrawGis);
diff --git a/src/resources.qrc b/src/resources.qrc
index 0cf0abb..cea6e0a 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -64,18 +64,22 @@
         <file>icons/32x32/Up.png</file>
         <file>icons/32x32/SetupMapWorkspace.png</file>
         <file>icons/32x32/SaveGIS.png</file>
+        <file>icons/32x32/SaveGISAs.png</file>
         <file>icons/32x32/SaveAllGIS.png</file>
         <file>icons/32x32/LoadGIS.png</file>
-        <file>icons/32x32/GisProject.png</file>
+        <file>icons/32x32/GpxProject.png</file>
+        <file>icons/32x32/QmsProject.png</file>
         <file>icons/32x32/Route.png</file>
         <file>icons/32x32/Close.png</file>
         <file>icons/32x32/Track.png</file>
         <file>icons/32x32/EditDetails.png</file>
         <file>icons/32x32/EditText.png</file>
         <file>icons/32x32/TimeZoneSetup.png</file>
+        <file>icons/32x32/UnitSetup.png</file>
         <file>icons/32x32/Undo.png</file>
         <file>icons/32x32/Redo.png</file>
         <file>icons/32x32/Cut.png</file>
+        <file>icons/32x32/CutHistory.png</file>
         <file>icons/32x32/Copy.png</file>
         <file>icons/32x32/Paste.png</file>
         <file>icons/32x32/TextLeft.png</file>
@@ -89,6 +93,7 @@
         <file>icons/32x32/UnLock.png</file>
         <file>icons/32x32/WptMove.png</file>
         <file>icons/32x32/WptProj.png</file>
+        <file>icons/32x32/WptProx.png</file>
         <file>icons/32x32/TrkCut.png</file>
         <file>icons/32x32/TrkProfile.png</file>
         <file>icons/32x32/Tainted.png</file>
@@ -106,6 +111,11 @@
         <file>icons/32x32/Reverse.png</file>
         <file>icons/32x32/Combine.png</file>
         <file>icons/32x32/SearchGoogle.png</file>
+        <file>icons/32x32/Start.png</file>
+        <file>icons/32x32/SetEle.png</file>
+        <file>icons/32x32/Pattern.png</file>
+        <file>icons/32x32/Opacity.png</file>
+
 
         <file>icons/48x48/2DFix.png</file>
         <file>icons/48x48/3DFix.png</file>
@@ -152,18 +162,22 @@
         <file>icons/48x48/Up.png</file>
         <file>icons/48x48/SetupMapWorkspace.png</file>
         <file>icons/48x48/SaveGIS.png</file>
+        <file>icons/48x48/SaveGISAs.png</file>
         <file>icons/48x48/SaveAllGIS.png</file>
         <file>icons/48x48/LoadGIS.png</file>
-        <file>icons/48x48/GisProject.png</file>
+        <file>icons/48x48/GpxProject.png</file>
+        <file>icons/48x48/QmsProject.png</file>
         <file>icons/48x48/Route.png</file>
         <file>icons/48x48/Close.png</file>
         <file>icons/48x48/Track.png</file>
         <file>icons/48x48/EditDetails.png</file>
         <file>icons/48x48/EditText.png</file>
         <file>icons/48x48/TimeZoneSetup.png</file>
+        <file>icons/48x48/UnitSetup.png</file>
         <file>icons/48x48/Undo.png</file>
         <file>icons/48x48/Redo.png</file>
         <file>icons/48x48/Cut.png</file>
+        <file>icons/48x48/CutHistory.png</file>
         <file>icons/48x48/Copy.png</file>
         <file>icons/48x48/Paste.png</file>
         <file>icons/48x48/TextLeft.png</file>
@@ -177,6 +191,7 @@
         <file>icons/48x48/UnLock.png</file>
         <file>icons/48x48/WptMove.png</file>
         <file>icons/48x48/WptProj.png</file>
+        <file>icons/48x48/WptProx.png</file>
         <file>icons/48x48/TrkCut.png</file>
         <file>icons/48x48/TrkProfile.png</file>
         <file>icons/48x48/Tainted.png</file>
@@ -194,6 +209,10 @@
         <file>icons/48x48/Reverse.png</file>
         <file>icons/48x48/Combine.png</file>
         <file>icons/48x48/SearchGoogle.png</file>
+        <file>icons/48x48/Start.png</file>
+        <file>icons/48x48/SetEle.png</file>
+        <file>icons/48x48/Pattern.png</file>
+        <file>icons/48x48/Opacity.png</file>
 
 
         <file>icons/cache/32x32/bluepin.png</file>
diff --git a/src/helpers/CSelectProjectDialog.h b/src/units/CUnitsSetup.cpp
similarity index 50%
copy from src/helpers/CSelectProjectDialog.h
copy to src/units/CUnitsSetup.cpp
index 25150e2..81a6dca 100644
--- a/src/helpers/CSelectProjectDialog.h
+++ b/src/units/CUnitsSetup.cpp
@@ -16,34 +16,47 @@
 
 **********************************************************************************************/
 
-#ifndef CSELECTPROJECTDIALOG_H
-#define CSELECTPROJECTDIALOG_H
+#include "units/CUnitsSetup.h"
+#include "units/IUnit.h"
+#include "CMainWindow.h"
 
-#include <QDialog>
-#include "ui_ISelectProjectDialog.h"
-
-class QTreeWidget;
-
-class CSelectProjectDialog : public QDialog, private Ui::ISelectProjectDialog
+CUnitsSetup::CUnitsSetup(QWidget *parent)
+    : QDialog(parent)
+{
+    setupUi(this);
+
+    switch(IUnit::self().type)
+    {
+    case IUnit::eTypeMetric:
+        radioMetric->setChecked(true);
+        break;
+    case IUnit::eTypeImperial:
+        radioImperial->setChecked(true);
+        break;
+    case IUnit::eTypeNautic:
+        radioNautic->setChecked(true);
+        break;
+    }
+}
+
+CUnitsSetup::~CUnitsSetup()
 {
-    Q_OBJECT
-    public:
-        CSelectProjectDialog(QString& key, QString& name, QTreeWidget *parent);
-        virtual ~CSelectProjectDialog();
-
-    public slots:
-        void reject();
-
-    private slots:
-        void slotItemClicked(QListWidgetItem * item);
-        void slotProjectChanged(const QString& text);
-        void slotProjectEdited(const QString& text);
-
-    private:
-        QString& key;
-        QString& name;
-
-};
 
-#endif //CSELECTPROJECTDIALOG_H
+}
 
+void CUnitsSetup::accept()
+{
+    if(radioMetric->isChecked())
+    {
+        IUnit::setUnitType(IUnit::eTypeMetric, &CMainWindow::self());
+    }
+    else if(radioImperial->isChecked())
+    {
+        IUnit::setUnitType(IUnit::eTypeImperial, &CMainWindow::self());
+    }
+    else if(radioNautic->isChecked())
+    {
+        IUnit::setUnitType(IUnit::eTypeNautic, &CMainWindow::self());
+    }
+    QDialog::accept();
+}
diff --git a/src/gis/CGisSerialization.h b/src/units/CUnitsSetup.h
similarity index 76%
rename from src/gis/CGisSerialization.h
rename to src/units/CUnitsSetup.h
index 7273a21..24beae1 100644
--- a/src/gis/CGisSerialization.h
+++ b/src/units/CUnitsSetup.h
@@ -16,15 +16,22 @@
 
 **********************************************************************************************/
 
-#ifndef CGISSERIALIZATION_H
-#define CGISSERIALIZATION_H
+#ifndef CUNITSSETUP_H
+#define CUNITSSETUP_H
 
-class CGisSerialization
+#include <QDialog>
+#include "ui_IUnitsSetup.h"
+
+class CUnitsSetup : public QDialog, private Ui::IUnitsSetup
 {
     public:
-        CGisSerialization();
-        virtual ~CGisSerialization();
+        CUnitsSetup(QWidget * parent);
+        virtual ~CUnitsSetup();
+
+    public slots:
+        void accept();
+
 };
 
-#endif //CGISSERIALIZATION_H
+#endif //CUNITSSETUP_H
 
diff --git a/src/units/IUnit.h b/src/units/IUnit.h
index a1da356..246a254 100644
--- a/src/units/IUnit.h
+++ b/src/units/IUnit.h
@@ -31,7 +31,7 @@ extern const QPoint  NOPOINT;
 
 class IUnit : public QObject
 {
-    Q_OBJECT;
+    Q_OBJECT
     public:
         virtual ~IUnit();
 
diff --git a/src/helpers/ISelectProjectDialog.ui b/src/units/IUnitsSetup.ui
similarity index 55%
copy from src/helpers/ISelectProjectDialog.ui
copy to src/units/IUnitsSetup.ui
index 40d521b..7b8fe56 100644
--- a/src/helpers/ISelectProjectDialog.ui
+++ b/src/units/IUnitsSetup.ui
@@ -1,34 +1,56 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
- <class>ISelectProjectDialog</class>
- <widget class="QDialog" name="ISelectProjectDialog">
+ <class>IUnitsSetup</class>
+ <widget class="QDialog" name="IUnitsSetup">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>400</width>
-    <height>300</height>
+    <height>92</height>
    </rect>
   </property>
   <property name="windowTitle">
-   <string>Select a project...</string>
+   <string>Setup units...</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"/>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QRadioButton" name="radioMetric">
+       <property name="text">
+        <string>Metric</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioImperial">
+       <property name="text">
+        <string>Imperial</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioNautic">
+       <property name="text">
+        <string>Nautic</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
    </item>
    <item>
-    <widget class="QLineEdit" name="lineEdit"/>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>7</height>
+      </size>
+     </property>
+    </spacer>
    </item>
    <item>
     <widget class="QDialogButtonBox" name="buttonBox">
@@ -47,7 +69,7 @@
   <connection>
    <sender>buttonBox</sender>
    <signal>accepted()</signal>
-   <receiver>ISelectProjectDialog</receiver>
+   <receiver>IUnitsSetup</receiver>
    <slot>accept()</slot>
    <hints>
     <hint type="sourcelabel">
@@ -63,7 +85,7 @@
   <connection>
    <sender>buttonBox</sender>
    <signal>rejected()</signal>
-   <receiver>ISelectProjectDialog</receiver>
+   <receiver>IUnitsSetup</receiver>
    <slot>reject()</slot>
    <hints>
     <hint type="sourcelabel">

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