[metview] 12/20: New upstream 4.7.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Sat Oct 29 13:50:48 UTC 2016


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

mckinstry pushed a commit to tag debian/4.7.2-1
in repository metview.

commit f5a6c8413df3a62cfec809b9f9bb8e0f9395f851
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Wed Sep 14 20:13:26 2016 +0100

    New upstream 4.7.0
---
 CMakeLists.txt                                     |   9 +
 LICENSE                                            |   2 +-
 NOTICE                                             |   2 +-
 VERSION.cmake                                      |   4 +-
 project_summary.cmake                              |   5 +
 share/metview/etc/AnnotationViewDef                |   4 +-
 share/metview/etc/AxisDef                          |   2 +-
 share/metview/etc/BinningObjectDef                 |   2 +-
 share/metview/etc/CMakeLists.txt                   |   2 +-
 share/metview/etc/CoastDef                         |   2 +-
 share/metview/etc/ContDef                          |   2 +-
 share/metview/etc/EPSOutputDef                     |  14 --
 share/metview/etc/GeoToGribDef                     |   3 +
 share/metview/etc/GeoToGribRules                   |   3 +
 share/metview/etc/GraphDef                         |   2 +-
 share/metview/etc/KMLOutputDef                     |  14 --
 share/metview/etc/MAXISDef                         |   2 +-
 share/metview/etc/MBOXPLOTDef                      |   2 +-
 share/metview/etc/MCOASTDef                        |   2 +-
 share/metview/etc/MCONTDef                         |   2 +-
 share/metview/etc/MGRAPHDef                        |   2 +-
 share/metview/etc/MLEGENDDef                       |   2 +-
 share/metview/etc/MSYMBDef                         |   2 +-
 share/metview/etc/MTAYLORDef                       |   2 +-
 share/metview/etc/MTEXTDef                         |   2 +-
 share/metview/etc/MTHERMOGRIDDef                   |   2 +-
 share/metview/etc/MWINDDef                         |   2 +-
 .../etc/{MagicsColors.h => MagicsColours.txt}      |   0
 share/metview/etc/ObjectList                       |   2 +-
 share/metview/etc/ObsPlottingDef                   |   2 +-
 share/metview/etc/PDFOutputDef                     |  14 --
 share/metview/etc/PNGOutputDef                     |  14 --
 share/metview/etc/PSOutputDef                      |  14 --
 share/metview/etc/PageFrameDef                     |   4 +-
 share/metview/etc/PlotPageDef                      |   2 +-
 share/metview/etc/SVGOutputDef                     |  14 --
 share/metview/etc/SubpageFrameDef                  |   4 +-
 share/metview/etc/SymbDef                          |   2 +-
 share/metview/etc/TextDef                          |   2 +-
 share/metview/etc/WindDef                          |   2 +-
 share/metview/etc/licence_for_about_box.txt        |   2 +-
 share/metview/icons/FLEXTRA_FILE.xpm               |   0
 share/metview/icons/FLEXTRA_PREPARE.xpm            |   0
 share/metview/icons/FLEXTRA_RUN.xpm                |   0
 share/metview/icons/FLEXTRA_VISUALISER.xpm         |   0
 share/metview/icons/INPUTVISUALISER.xpm            |   0
 share/metview/icons/NETCDFPLUS.xpm                 |   0
 share/metview/icons/ODB_DB.xpm                     |   0
 share/metview/icons/ODB_VISUALISER.xpm             |   0
 share/metview/icons/TABLEVISUALISER.xpm            |   0
 share/metview/icons/help_area.xpm                  |   0
 share/metview/icons/help_line.xpm                  |   0
 share/metview/icons/help_map.xpm                   |   0
 share/metview/icons/help_point.xpm                 |   0
 share/metview/icons/help_station.xpm               |   0
 share/metview/icons_mv5/AVERAGE.xpm                |   0
 share/metview/icons_mv5/AVERAGEVIEW.xpm            |   0
 share/metview/icons_mv5/GRIBVECTORS.xpm            |   0
 share/metview/icons_mv5/GeoToKML.xpm               |   0
 share/metview/icons_mv5/HOVMOELLERDATA.xpm         |   0
 share/metview/icons_mv5/INPUTVISUALISER.svg        |   0
 share/metview/icons_mv5/Interpolation.svg          |   0
 share/metview/icons_mv5/MAGML.xpm                  |   0
 share/metview/icons_mv5/MHOVMOELLERDATA.xpm        |   0
 share/metview/icons_mv5/MHOVMOELLERVIEW.xpm        |   0
 share/metview/icons_mv5/MTHERMO.xpm                |   0
 share/metview/icons_mv5/MVPROFILE.xpm              |   0
 share/metview/icons_mv5/MVPROFILEVIEW.xpm          |   0
 share/metview/icons_mv5/MXAVERAGE.xpm              |   0
 share/metview/icons_mv5/MXAVERAGEVIEW.xpm          |   0
 share/metview/icons_mv5/MXSECTION.xpm              |   0
 share/metview/icons_mv5/MXSECTIONVIEW.xpm          |   0
 share/metview/icons_mv5/MetPlus.xpm                |   0
 share/metview/icons_mv5/NETCDFPLUS.svg             |   0
 share/metview/icons_mv5/OBSTAT.xpm                 |   0
 share/metview/icons_mv5/OBSTAT_CURVE.xpm           |   0
 share/metview/icons_mv5/OBSTAT_SCATTER.xpm         |   0
 share/metview/icons_mv5/ODB_MARS.xpm               |   0
 share/metview/icons_mv5/REPROJECTION.xpm           |   0
 share/metview/icons_mv5/TABLEVISUALISER.svg        |   0
 share/metview/icons_mv5/THERMODATA.xpm             |   0
 share/metview/icons_mv5/VPROF.xpm                  |   0
 share/metview/icons_mv5/VPROFILE.xpm               |   0
 share/metview/icons_mv5/VPROFVIEW.xpm              |   0
 share/metview/icons_mv5/WEBACCESS.xpm              |   0
 share/metview/icons_mv5/XAVERAGE.xpm               |   0
 share/metview/icons_mv5/XSECT.xpm                  |   0
 share/metview/icons_mv5/XSECTION.xpm               |   0
 share/metview/icons_mv5/XSECTVIEW.xpm              |   0
 src/BufrExaminer/BufrMetaData.cc                   |  67 +++---
 src/CMakeLists.txt                                 |   5 +-
 src/Desktop/EditTransaction.cc                     |   3 +-
 src/Desktop/FolderInfo.cc                          |   1 -
 src/Desktop/MvQColourLine.cc                       |   4 +-
 src/Desktop/MvQDetailedFolderView.cc               |   5 +-
 src/Desktop/MvQFolderItemProperty.cc               |   7 +-
 src/Desktop/MvQFolderItemProperty.h                |   5 +-
 src/Desktop/MvQFolderViewBase.cc                   |   3 -
 src/Desktop/MvQIconFolderView.cc                   |   5 +-
 src/Desktop/MvQPageView.cc                         |  25 +--
 src/Desktop/MvQRequestPanelLine.cc                 |   6 +-
 src/Download/CMakeLists.txt                        |  12 +
 src/Download/DOWNLOAD.svg                          | 226 +++++++++++++++++++
 src/Download/Download.cc                           | 208 +++++++++++++++++
 src/Download/DownloadDef                           |  12 +
 src/Download/ObjectSpec.Download                   |  29 +++
 src/Hovmoeller/HovToolkit.cc                       |   4 +-
 src/Macro/grib.cc                                  |  54 ++++-
 src/Macro/include/macro.h                          |   2 -
 src/Macro/mlist.cc                                 |   2 +-
 src/Macro/request.cc                               |   3 +
 src/Macro/value.cc                                 |   4 +-
 src/MacroEditor/FindTextDialog.cc                  |   9 +
 src/MacroEditor/FindTextDialog.h                   |   1 +
 src/MacroEditor/FindTextDialog.ui                  |   2 +-
 src/MacroEditor/MacroEdit.cc                       |  31 ++-
 src/MacroEditor/MacroEdit.h                        |   5 +
 src/MvApp/geo_to_grib.cc                           | 154 ++++++++++++-
 src/ObsFilter/BufrPicker.cc                        |   2 +-
 src/ObsFilter/ObsFilter.cc                         |   2 +-
 src/OgcClient/MvQOgcParam.h                        |   2 +
 src/OgcClient/MvQOgcRequest.h                      |   2 +
 src/OgcClient/MvQWmsClient.cc                      |  10 +-
 src/Percentile/Percentile.cc                       |   2 +-
 src/Scm/ObjectSpec.Scm                             |   3 +-
 src/Stations/stat.fmt                              | 247 ++++++++++----------
 src/Thermo/MTHERMOGRIDDef                          |   2 +-
 src/Thermo/MThermoDef                              |   2 +-
 src/libMetview/MvObs.cc                            |   1 +
 src/libMetview/MvRequest.cc                        |  29 ++-
 src/libMetview/MvScanFileType.cc                   |   4 +-
 src/libMvQtGui/MvQCheckBoxCombo.cc                 |   2 +-
 src/libMvQtGui/MvQKeyDialog.cc                     |   4 -
 src/libMvQtGui/MvQKeyProfileTree.cc                |   2 +-
 src/libUtil/CMakeLists.txt                         |   5 +
 src/libUtil/Grib.cc                                |   4 +-
 src/libUtil/MvAlmostObsoleteRequest.cc             |  10 +-
 src/libUtil/MvNetwork.cc                           | 249 +++++++++++++++++++++
 src/libUtil/MvNetwork.h                            |  69 ++++++
 src/libUtil/MvOdb.cc                               |   1 -
 src/libUtil/TableReader.cc                         |  23 +-
 src/libUtil/TableReader.h                          |  22 +-
 src/libUtil/proj_braz.cc                           |  46 ++--
 src/libUtil/proj_braz.hpp                          |   2 +-
 src/uPlot/MagPlusBatchService.cc                   |   2 +-
 test/data/fc_data.grib                             | Bin 0 -> 480 bytes
 test/data/gpt_to_grib_exp_mean_reference.grb       | Bin 0 -> 3240 bytes
 test/data/gpt_to_grib_exp_sum_reference.grb        | Bin 0 -> 3240 bytes
 test/data/gpt_to_grib_nearest_count_reference.grb  | Bin 0 -> 3240 bytes
 test/data/gpt_to_grib_nearest_mean_reference.grb   | Bin 0 -> 360 bytes
 test/data/gpt_to_grib_nearest_sum_reference.grb    | Bin 0 -> 360 bytes
 test/data/gpt_to_grib_reciprocal_reference.grb     | Bin 0 -> 3240 bytes
 test/data/t1000_LL_7x7.grb                         | Bin 0 -> 1560 bytes
 test/macros/CMakeLists.txt                         |  17 ++
 test/macros/HelloWorld.mv                          |   3 +-
 test/macros/gpt_to_grib_core.mv                    |  59 +++++
 test/macros/gpt_to_grib_nearest.mv                 |  74 ++++++
 test/macros/grib_dates.mv                          |  54 +++++
 test/macros/layoutx3.mv                            |   7 +-
 test/macros/plot_coast_order.mv                    |   1 +
 test/macros/set_output.mv                          |   4 +-
 161 files changed, 1601 insertions(+), 433 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e9b0765..6adf3c5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -62,6 +62,7 @@ option( ENABLE_USAGE_LOG     "enable usage logging (only at ECMWF)"
 option( ENABLE_QT_DEBUG      "enable Qt debugging messages"                       OFF )
 option( ENABLE_QT5           "enable Qt5"                                         OFF )
 option( ENABLE_INPE          "enable INPE modules"                                ON )
+option( ENABLE_URL_DOWNLOAD  "enable downloading of files from URLs"              ON )
 option( ENABLE_WEATHER_ROOM  "enable Weather Room plot export (only at ECMWF)"    OFF )
 option( ENABLE_NETWORK_PROXY "enable network proxy settings for WMS"              OFF )
 option( ENABLE_EXPERIMENTAL  "enable experimental modules"                        OFF )
@@ -219,6 +220,14 @@ else()
 endif()
 
 
+# Network access (download via URLs)
+if(ENABLE_URL_DOWNLOAD)
+    if(NOT CURL_FOUND)
+        ecbuild_critical("URL_DOWNLOAD was enabled, but the 'curl' development package was not found.")
+    endif()
+endif()
+
+
 
 
 ###############################################################################
diff --git a/LICENSE b/LICENSE
index 99a1252..cddea2c 100644
--- a/LICENSE
+++ b/LICENSE
@@ -186,7 +186,7 @@
       same "printed page" as the copyright notice for easier
       identification within third-party archives.
 
-   Copyright 2007-2012 European Centre for Medium-Range Weather Forecasts (ECMWF)
+   Copyright 2007-2016 European Centre for Medium-Range Weather Forecasts (ECMWF)
    and Brazil's Instituto Nacional de Pesquisas Espaciais (INPE)
 
    Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/NOTICE b/NOTICE
index 352227e..df7294e 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,7 +1,7 @@
 Metview
 =======
 
-Copyright 2007-2015 ECMWF and INPE
+Copyright 2007-2016 ECMWF and INPE
 
 This product mainly includes software developed by the
 Development Section at the 
diff --git a/VERSION.cmake b/VERSION.cmake
index c7fb432..8fadc4b 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -1,5 +1,5 @@
 set(${PROJECT_NAME}_MAJOR_VERSION_STR    "4")
-set(${PROJECT_NAME}_MINOR_VERSION_STR    "6")
-set(${PROJECT_NAME}_REVISION_VERSION_STR "7")
+set(${PROJECT_NAME}_MINOR_VERSION_STR    "7")
+set(${PROJECT_NAME}_REVISION_VERSION_STR "0")
 
 set(${PROJECT_NAME}_VERSION_STR  "${${PROJECT_NAME}_MAJOR_VERSION_STR}.${${PROJECT_NAME}_MINOR_VERSION_STR}.${${PROJECT_NAME}_REVISION_VERSION_STR}")
diff --git a/project_summary.cmake b/project_summary.cmake
index 622a472..e661835 100644
--- a/project_summary.cmake
+++ b/project_summary.cmake
@@ -32,9 +32,14 @@ ecbuild_info("      Usage log    :  ${ENABLE_USAGE_LOG}")
 ecbuild_info("      Log dir      :  ${LOG_DIR}")
 ecbuild_info("      INPE access  :  ${ENABLE_INPE}")
 ecbuild_info("      Weather Room :  ${ENABLE_WEATHER_ROOM}")
+ecbuild_info("      URL download :  ${ENABLE_URL_DOWNLOAD}")
 ecbuild_info("      Experimental :  ${ENABLE_EXPERIMENTAL}")
 ecbuild_info("      Contrib      :  ${ENABLE_CONTRIB}")
 
+if(NOT CURL_FOUND)
+ecbuild_warn("      If you would like to use the Download module or the MARS Web API, please install the 'curl' development package")
+endif()
+
 
 ecbuild_info("")
 ecbuild_info(" Built ${PROJECT_NAME} version ${${PROJECT_NAME}_VERSION_STR}")
diff --git a/share/metview/etc/AnnotationViewDef b/share/metview/etc/AnnotationViewDef
index fd80dd9..989131e 100644
--- a/share/metview/etc/AnnotationViewDef
+++ b/share/metview/etc/AnnotationViewDef
@@ -36,7 +36,7 @@ SUBPAGE_FRAME
 
 SUBPAGE_FRAME_COLOUR [interface=colour]
 {
-   %include MagicsColors.h
+   %include MagicsColours.txt
 } = BLACK
 
 SUBPAGE_FRAME_LINE_STYLE
@@ -64,7 +64,7 @@ SUBPAGE_FRAME_THICKNESS
 
 SUBPAGE_BACKGROUND_COLOUR [interface=colour]
 {
-   %include MagicsColors.h
+   %include MagicsColours.txt
 } = WHITE
 
 }
diff --git a/share/metview/etc/AxisDef b/share/metview/etc/AxisDef
index 5bfc501..eeac5f2 100755
--- a/share/metview/etc/AxisDef
+++ b/share/metview/etc/AxisDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
        }
  
        COLOUR {
-			%include MagicsColors.h
+			%include MagicsColours.txt
        } 
 
        LINE_STYLE {
diff --git a/share/metview/etc/BinningObjectDef b/share/metview/etc/BinningObjectDef
index 520a081..43cd33a 100644
--- a/share/metview/etc/BinningObjectDef
+++ b/share/metview/etc/BinningObjectDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/CMakeLists.txt b/share/metview/etc/CMakeLists.txt
index 336c165..99b23a7 100644
--- a/share/metview/etc/CMakeLists.txt
+++ b/share/metview/etc/CMakeLists.txt
@@ -51,7 +51,7 @@ set(files
 	MacroParamDef
 	MacroParamRules
 	MacroRules
-	MagicsColors.h
+	MagicsColours.txt
 	MapViewDef
 	MapViewRules
 	MarsDef
diff --git a/share/metview/etc/CoastDef b/share/metview/etc/CoastDef
index 6929531..e4a9bb7 100755
--- a/share/metview/etc/CoastDef
+++ b/share/metview/etc/CoastDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
        }
  
        COLOUR {
-			%include MagicsColors.h
+			%include MagicsColours.txt
        } 
 
        LINE_STYLE {
diff --git a/share/metview/etc/ContDef b/share/metview/etc/ContDef
index 3c867fa..d8f4e44 100755
--- a/share/metview/etc/ContDef
+++ b/share/metview/etc/ContDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
        }
  
        COLOUR {
-			%include MagicsColors.h
+			%include MagicsColours.txt
        } 
 
        LINE_STYLE {
diff --git a/share/metview/etc/EPSOutputDef b/share/metview/etc/EPSOutputDef
index e065e3f..16a4871 100644
--- a/share/metview/etc/EPSOutputDef
+++ b/share/metview/etc/EPSOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
-	COLOUR {
-		%include MagicsColors.h
-	}
-	STYLE {
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DOT; CHAIN_DOT
-		CHAIN_DASH; CHAIN_DASH
-	}
-}
-
 EPSOUTPUT; Magics; Automatically generated
 {
 	OUTPUT_TITLE
diff --git a/share/metview/etc/GeoToGribDef b/share/metview/etc/GeoToGribDef
index 16cd08c..f7993f7 100644
--- a/share/metview/etc/GeoToGribDef
+++ b/share/metview/etc/GeoToGribDef
@@ -60,6 +60,9 @@ GEO_TO_GRIB; Transform Geopoints to regular grid; metview
 		RECIPROCAL
 		EXPONENTIAL_MEAN
 		EXPONENTIAL_SUM
+		NEAREST_GRIDPOINT_MEAN
+		NEAREST_GRIDPOINT_SUM
+		NEAREST_GRIDPOINT_COUNT
 	} = RECIPROCAL
 
 	PARAMETER
diff --git a/share/metview/etc/GeoToGribRules b/share/metview/etc/GeoToGribRules
index ab8fff2..bd77917 100644
--- a/share/metview/etc/GeoToGribRules
+++ b/share/metview/etc/GeoToGribRules
@@ -5,3 +5,6 @@
 
 %if GRID_DEFINITION_MODE <> GRIB %then
 	%unset TEMPLATE_GRIB
+
+%if INTERPOLATION_METHOD = NEAREST_GRIDPOINT_MEAN %or INTERPOLATION_METHOD = NEAREST_GRIDPOINT_SUM %or INTERPOLATION_METHOD = NEAREST_GRIDPOINT_COUNT %then
+	%unset TOLERANCE
diff --git a/share/metview/etc/GraphDef b/share/metview/etc/GraphDef
index 833aa47..431c4fe 100755
--- a/share/metview/etc/GraphDef
+++ b/share/metview/etc/GraphDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
        }
  
        COLOUR {
-			%include MagicsColors.h
+			%include MagicsColours.txt
        } 
 
        LINE_STYLE {
diff --git a/share/metview/etc/KMLOutputDef b/share/metview/etc/KMLOutputDef
index 9707841..2323eb5 100644
--- a/share/metview/etc/KMLOutputDef
+++ b/share/metview/etc/KMLOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
-	COLOUR {
-		%include MagicsColors.h
-	}
-	STYLE {
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DOT; CHAIN_DOT
-		CHAIN_DASH; CHAIN_DASH
-	}
-}
-
 KMLOUTPUT; Magics; Automatically generated
 {
 	OUTPUT_TITLE
diff --git a/share/metview/etc/MAXISDef b/share/metview/etc/MAXISDef
index ff6ffd6..6b61eda 100755
--- a/share/metview/etc/MAXISDef
+++ b/share/metview/etc/MAXISDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MBOXPLOTDef b/share/metview/etc/MBOXPLOTDef
index 8d9d5dd..1c87a96 100644
--- a/share/metview/etc/MBOXPLOTDef
+++ b/share/metview/etc/MBOXPLOTDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 		}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MCOASTDef b/share/metview/etc/MCOASTDef
index 80db4b4..61dcf23 100644
--- a/share/metview/etc/MCOASTDef
+++ b/share/metview/etc/MCOASTDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MCONTDef b/share/metview/etc/MCONTDef
index e767d67..01efde4 100644
--- a/share/metview/etc/MCONTDef
+++ b/share/metview/etc/MCONTDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MGRAPHDef b/share/metview/etc/MGRAPHDef
index a558a5c..20ef508 100755
--- a/share/metview/etc/MGRAPHDef
+++ b/share/metview/etc/MGRAPHDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MLEGENDDef b/share/metview/etc/MLEGENDDef
index 60f56ea..d2ca98b 100755
--- a/share/metview/etc/MLEGENDDef
+++ b/share/metview/etc/MLEGENDDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MSYMBDef b/share/metview/etc/MSYMBDef
index fb8b0e3..ef0898e 100644
--- a/share/metview/etc/MSYMBDef
+++ b/share/metview/etc/MSYMBDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MTAYLORDef b/share/metview/etc/MTAYLORDef
index d748a1e..601943c 100644
--- a/share/metview/etc/MTAYLORDef
+++ b/share/metview/etc/MTAYLORDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 		}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MTEXTDef b/share/metview/etc/MTEXTDef
index 629564f..561a853 100755
--- a/share/metview/etc/MTEXTDef
+++ b/share/metview/etc/MTEXTDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MTHERMOGRIDDef b/share/metview/etc/MTHERMOGRIDDef
index 511fe49..90ae603 100644
--- a/share/metview/etc/MTHERMOGRIDDef
+++ b/share/metview/etc/MTHERMOGRIDDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MWINDDef b/share/metview/etc/MWINDDef
index d16df4d..359ec3c 100644
--- a/share/metview/etc/MWINDDef
+++ b/share/metview/etc/MWINDDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/MagicsColors.h b/share/metview/etc/MagicsColours.txt
similarity index 100%
rename from share/metview/etc/MagicsColors.h
rename to share/metview/etc/MagicsColours.txt
diff --git a/share/metview/etc/ObjectList b/share/metview/etc/ObjectList
index 618e790..9976d85 100644
--- a/share/metview/etc/ObjectList
+++ b/share/metview/etc/ObjectList
@@ -59,7 +59,7 @@ resources,
 			    devices/all_printers/
 			    coastlines/macros/hidden/general/
 			    templates/system_templates/retrieve,
-	colour_file 	  = '$METVIEW_DIR_SHARE/etc/MagicsColors.h',
+	colour_file 	  = '$METVIEW_DIR_SHARE/etc/MagicsColours.txt',
 	help_file         = 'Metview_UI_Help',
 #	vismod_help_file  = 'Visualisation_Help',
 #	printer_list_file = '$METVIEW_DIR_SHARE/etc/PrinterList',
diff --git a/share/metview/etc/ObsPlottingDef b/share/metview/etc/ObsPlottingDef
index a011027..950eae9 100644
--- a/share/metview/etc/ObsPlottingDef
+++ b/share/metview/etc/ObsPlottingDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/share/metview/etc/PDFOutputDef b/share/metview/etc/PDFOutputDef
index e0e0d6e..090f921 100644
--- a/share/metview/etc/PDFOutputDef
+++ b/share/metview/etc/PDFOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
-	COLOUR {
-		%include MagicsColors.h
-	}
-	STYLE {
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DOT; CHAIN_DOT
-		CHAIN_DASH; CHAIN_DASH
-	}
-}
-
 PDFOUTPUT; Magics; Automatically generated
 {
 	OUTPUT_TITLE
diff --git a/share/metview/etc/PNGOutputDef b/share/metview/etc/PNGOutputDef
index 5f4b81b..3a9d1ae 100644
--- a/share/metview/etc/PNGOutputDef
+++ b/share/metview/etc/PNGOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
-	COLOUR {
-		%include MagicsColors.h
-	}
-	STYLE {
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DOT; CHAIN_DOT
-		CHAIN_DASH; CHAIN_DASH
-	}
-}
-
 PNGOUTPUT; Magics; Automatically generated
 {
 	OUTPUT_TITLE
diff --git a/share/metview/etc/PSOutputDef b/share/metview/etc/PSOutputDef
index a5e29aa..6e7a68a 100644
--- a/share/metview/etc/PSOutputDef
+++ b/share/metview/etc/PSOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
-	COLOUR {
-		%include MagicsColors.h
-	}
-	STYLE {
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DOT; CHAIN_DOT
-		CHAIN_DASH; CHAIN_DASH
-	}
-}
-
 PSOUTPUT; Magics; Automatically generated
 {
 	OUTPUT_TITLE
diff --git a/share/metview/etc/PageFrameDef b/share/metview/etc/PageFrameDef
index bf6700f..4990744 100644
--- a/share/metview/etc/PageFrameDef
+++ b/share/metview/etc/PageFrameDef
@@ -6,7 +6,7 @@ PAGE_FRAME
 
 PAGE_FRAME_COLOUR [interface = colour]
 {
-   %include MagicsColors.h
+   %include MagicsColours.txt
 } = CHARCOAL
 
 PAGE_FRAME_LINE_STYLE
@@ -56,7 +56,7 @@ PAGE_FRAME_THICKNESS
 
    PAGE_ID_LINE_COLOUR [ visible = false, interface = colour]
    {
-      %include MagicsColors.h
+      %include MagicsColours.txt
    } = ECMWF_BLUE
 
    PAGE_ID_LINE_SYSTEM_PLOT [ visible = false ]
diff --git a/share/metview/etc/PlotPageDef b/share/metview/etc/PlotPageDef
index 27bea30..8c8e4da 100644
--- a/share/metview/etc/PlotPageDef
+++ b/share/metview/etc/PlotPageDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
        }
  
        COLOUR {
-			%include MagicsColors.h
+			%include MagicsColours.txt
        } 
 
        LINE_STYLE {
diff --git a/share/metview/etc/SVGOutputDef b/share/metview/etc/SVGOutputDef
index ba8451c..e0bf972 100644
--- a/share/metview/etc/SVGOutputDef
+++ b/share/metview/etc/SVGOutputDef
@@ -1,17 +1,3 @@
-PARAMSHARE ; ParamShare; PARAMSHARE
-{
-	COLOUR {
-		%include MagicsColors.h
-	}
-	STYLE {
-		SOLID; SOLID
-		DASH; DASH
-		DOT; DOT
-		CHAIN_DOT; CHAIN_DOT
-		CHAIN_DASH; CHAIN_DASH
-	}
-}
-
 SVGOUTPUT; Magics; Automatically generated
 {
 	OUTPUT_TITLE
diff --git a/share/metview/etc/SubpageFrameDef b/share/metview/etc/SubpageFrameDef
index 5bba56a..784ecad 100644
--- a/share/metview/etc/SubpageFrameDef
+++ b/share/metview/etc/SubpageFrameDef
@@ -6,7 +6,7 @@ SUBPAGE_FRAME
 
 SUBPAGE_FRAME_COLOUR [interface = colour]
 {
-   %include MagicsColors.h
+   %include MagicsColours.txt
 } = BLACK
 
 SUBPAGE_FRAME_LINE_STYLE
@@ -34,5 +34,5 @@ SUBPAGE_FRAME_THICKNESS
 
 SUBPAGE_BACKGROUND_COLOUR [interface = colour]
 {
-   %include MagicsColors.h
+   %include MagicsColours.txt
 } = WHITE
diff --git a/share/metview/etc/SymbDef b/share/metview/etc/SymbDef
index 0e03ec1..e1a6512 100755
--- a/share/metview/etc/SymbDef
+++ b/share/metview/etc/SymbDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
        }
  
        COLOUR {
-			%include MagicsColors.h
+			%include MagicsColours.txt
        } 
 
        LINE_STYLE {
diff --git a/share/metview/etc/TextDef b/share/metview/etc/TextDef
index 5067d26..7f23afb 100755
--- a/share/metview/etc/TextDef
+++ b/share/metview/etc/TextDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
        }
 
        COLOUR {
-			%include MagicsColors.h
+			%include MagicsColours.txt
        }
 
        LINE_STYLE {
diff --git a/share/metview/etc/WindDef b/share/metview/etc/WindDef
index e53f43c..dff9331 100755
--- a/share/metview/etc/WindDef
+++ b/share/metview/etc/WindDef
@@ -6,7 +6,7 @@ PARAMSHARE ; ParamShare; PARAMSHARE
        }
  
        COLOUR {
-			%include MagicsColors.h
+			%include MagicsColours.txt
        } 
 
        LINE_STYLE {
diff --git a/share/metview/etc/licence_for_about_box.txt b/share/metview/etc/licence_for_about_box.txt
index 77221a0..8b9a1dd 100644
--- a/share/metview/etc/licence_for_about_box.txt
+++ b/share/metview/etc/licence_for_about_box.txt
@@ -1,4 +1,4 @@
-Copyright 2014 ECMWF and INPE. This software is distributed under the terms
+Copyright 2016 ECMWF and INPE. This software is distributed under the terms
 of the Apache License version 2.0. In applying this license, ECMWF does not
 waive the privileges and immunities granted to it by virtue of its status as
 an Intergovernmental Organization or submit itself to any jurisdiction.
diff --git a/share/metview/icons/FLEXTRA_FILE.xpm b/share/metview/icons/FLEXTRA_FILE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/FLEXTRA_PREPARE.xpm b/share/metview/icons/FLEXTRA_PREPARE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/FLEXTRA_RUN.xpm b/share/metview/icons/FLEXTRA_RUN.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/FLEXTRA_VISUALISER.xpm b/share/metview/icons/FLEXTRA_VISUALISER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/INPUTVISUALISER.xpm b/share/metview/icons/INPUTVISUALISER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/NETCDFPLUS.xpm b/share/metview/icons/NETCDFPLUS.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/ODB_DB.xpm b/share/metview/icons/ODB_DB.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/ODB_VISUALISER.xpm b/share/metview/icons/ODB_VISUALISER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/TABLEVISUALISER.xpm b/share/metview/icons/TABLEVISUALISER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_area.xpm b/share/metview/icons/help_area.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_line.xpm b/share/metview/icons/help_line.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_map.xpm b/share/metview/icons/help_map.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_point.xpm b/share/metview/icons/help_point.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons/help_station.xpm b/share/metview/icons/help_station.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/AVERAGE.xpm b/share/metview/icons_mv5/AVERAGE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/AVERAGEVIEW.xpm b/share/metview/icons_mv5/AVERAGEVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/GRIBVECTORS.xpm b/share/metview/icons_mv5/GRIBVECTORS.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/GeoToKML.xpm b/share/metview/icons_mv5/GeoToKML.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/HOVMOELLERDATA.xpm b/share/metview/icons_mv5/HOVMOELLERDATA.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/INPUTVISUALISER.svg b/share/metview/icons_mv5/INPUTVISUALISER.svg
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/Interpolation.svg b/share/metview/icons_mv5/Interpolation.svg
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MAGML.xpm b/share/metview/icons_mv5/MAGML.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MHOVMOELLERDATA.xpm b/share/metview/icons_mv5/MHOVMOELLERDATA.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MHOVMOELLERVIEW.xpm b/share/metview/icons_mv5/MHOVMOELLERVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MTHERMO.xpm b/share/metview/icons_mv5/MTHERMO.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MVPROFILE.xpm b/share/metview/icons_mv5/MVPROFILE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MVPROFILEVIEW.xpm b/share/metview/icons_mv5/MVPROFILEVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MXAVERAGE.xpm b/share/metview/icons_mv5/MXAVERAGE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MXAVERAGEVIEW.xpm b/share/metview/icons_mv5/MXAVERAGEVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MXSECTION.xpm b/share/metview/icons_mv5/MXSECTION.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MXSECTIONVIEW.xpm b/share/metview/icons_mv5/MXSECTIONVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/MetPlus.xpm b/share/metview/icons_mv5/MetPlus.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/NETCDFPLUS.svg b/share/metview/icons_mv5/NETCDFPLUS.svg
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/OBSTAT.xpm b/share/metview/icons_mv5/OBSTAT.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/OBSTAT_CURVE.xpm b/share/metview/icons_mv5/OBSTAT_CURVE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/OBSTAT_SCATTER.xpm b/share/metview/icons_mv5/OBSTAT_SCATTER.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/ODB_MARS.xpm b/share/metview/icons_mv5/ODB_MARS.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/REPROJECTION.xpm b/share/metview/icons_mv5/REPROJECTION.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/TABLEVISUALISER.svg b/share/metview/icons_mv5/TABLEVISUALISER.svg
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/THERMODATA.xpm b/share/metview/icons_mv5/THERMODATA.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/VPROF.xpm b/share/metview/icons_mv5/VPROF.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/VPROFILE.xpm b/share/metview/icons_mv5/VPROFILE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/VPROFVIEW.xpm b/share/metview/icons_mv5/VPROFVIEW.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/WEBACCESS.xpm b/share/metview/icons_mv5/WEBACCESS.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/XAVERAGE.xpm b/share/metview/icons_mv5/XAVERAGE.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/XSECT.xpm b/share/metview/icons_mv5/XSECT.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/XSECTION.xpm b/share/metview/icons_mv5/XSECTION.xpm
old mode 100755
new mode 100644
diff --git a/share/metview/icons_mv5/XSECTVIEW.xpm b/share/metview/icons_mv5/XSECTVIEW.xpm
old mode 100755
new mode 100644
diff --git a/src/BufrExaminer/BufrMetaData.cc b/src/BufrExaminer/BufrMetaData.cc
index f1c06da..39825e4 100644
--- a/src/BufrExaminer/BufrMetaData.cc
+++ b/src/BufrExaminer/BufrMetaData.cc
@@ -65,21 +65,21 @@ bool BufrSectionDump::read(const string& fname, int msgCnt)
 
 	MvObsSet oset(fname.c_str());
 	MvObsSetIterator iter(oset);
-        MvObs obs;
+	MvObs obs;
 
-        bool found=false;
-	while(obs = iter())
+	bool found=false;
+	while( (obs = iter()) )
 	{
 		if(iter.msgNumber() == msgCnt)
-        	{
+		{
 			found=true;
 			break;
 		}
-        }
+	}
 
-        if(!found)
+	if(!found)
 	{
-            	log->error("Message not found!");
+		log->error("Message not found!");
 		return false;
 	}
 
@@ -204,20 +204,20 @@ void BufrDataDump::read(const string& fname, int msgCnt,int subsetCnt)
 
 	MvObsSet oset(fname.c_str());
 	MvObsSetIterator iter(oset);
-        MvObs obs;
+	MvObs obs;
 
-        bool found=false;
-	while(obs = iter())
+	bool found=false;
+	while( (obs = iter()) )
 	{
 		if(iter.msgNumber() == msgCnt)
-        	{
+		{
 			found=true;
 			break;
 		}
-        }
+	}
 
-        if(!found)
-        {
+	if(!found)
+	{
 		log->error("Message not found!");
 		return;
 	}
@@ -288,21 +288,21 @@ void BufrBitmapDump::read(const string& fname, int msgCnt,int subsetCnt)
 
 	MvObsSet oset(fname.c_str());
 	MvObsSetIterator iter(oset);
-        MvObs obs;
+	MvObs obs;
 
   	bool found=false;
-	while(obs = iter())
+	while( (obs = iter()) )
 	{
 		if(iter.msgNumber() == msgCnt)
-        	{
+		{
 			found=true;
 			break;
 		}
-        }
+	}
 
-        if(!found)
+	if(!found)
 	{
-            	log->error("Message not found!");
+		log->error("Message not found!");
 		return;
 	}
 
@@ -394,23 +394,22 @@ int BufrMetaData::subsetNum(int msgCnt)
 {
 	MvObsSet oset(fileName_.c_str());
 	MvObsSetIterator iter(oset);
-        MvObs obs;
+	MvObs obs;
 
 	bool found=false;
-	while(obs = iter())
+	while( (obs = iter()) )
 	{
 		if(iter.msgNumber() == msgCnt)
-        	{
+		{
 			found=true;
 			break;
 		}
-        }
+	}
 
-        if(!found)
-            return 0;
+	if(!found)
+		return 0;
 
 	return obs.msgSubsetCount();
-
 }
 
 void BufrMetaData::readMessages(MvKeyProfile *prof)
@@ -426,12 +425,12 @@ void BufrMetaData::readMessages(MvKeyProfile *prof)
 
 	//int index=1;
 
-    	messageNum_=0;
+	messageNum_=0;
 	totalMessageNum_=0;
 	int bytesRead=0;
 
-   	while(obs = iter())
-    	{
+   	while( (obs = iter()) )
+	{
  		if(iter.subsetNumber() != 1)
 		{
 			continue;
@@ -621,14 +620,12 @@ void BufrMetaData::readMessages(MvKeyProfile *prof)
                 		}
             		}
 		}
-
-            	messageNum_++;
+		messageNum_++;
 
 		//observer_->messageScanStepChanged(messageNum_);
 		bytesRead+=obs.messageTotalLen();
 		observer_->messageScanStepChanged(bytesRead);
 	}
-
 	totalMessageNum_=messageNum_;
 }
 
@@ -647,9 +644,9 @@ string BufrSection::itemValue(string itemName)
 
 void BufrSection::setText(const string& txt)
 {
-        text_=txt;
+	text_=txt;
 
-        istringstream in(text_);
+	istringstream in(text_);
 	string c;
 	while(getline(in,c))
 	{
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9632f6a..a3c072f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -9,7 +9,6 @@ add_subdirectory( Datacoverage )
 add_subdirectory( Divrot )
 add_subdirectory( Ecfile )
 add_subdirectory( Event )
-
 add_subdirectory( Macro )
 add_subdirectory( MvApp )
 add_subdirectory( Flextra )
@@ -38,6 +37,10 @@ if(ENABLE_OPERA_RADAR)
     add_subdirectory(OperaRadar)
 endif()
 
+if(ENABLE_URL_DOWNLOAD)
+    add_subdirectory(Download)
+endif()
+
 if(ENABLE_UI)
     if(ENABLE_MOTIF)
         add_subdirectory(libMvMotif)
diff --git a/src/Desktop/EditTransaction.cc b/src/Desktop/EditTransaction.cc
index 5710b0a..b119d55 100644
--- a/src/Desktop/EditTransaction.cc
+++ b/src/Desktop/EditTransaction.cc
@@ -82,7 +82,8 @@ void EditTransaction::callback(MvRequest& r)
 		const char* name = def("_NAME");
 		if(name)
 		{	  
-	      		if(const char* mode = def("_DEFAULT"))
+            const char* mode = def("_DEFAULT");
+            if(mode)
 			{ 
 				const IconClass& kind=IconClass::find(def.getVerb());
 			  	current_=kind.defaultObject();
diff --git a/src/Desktop/FolderInfo.cc b/src/Desktop/FolderInfo.cc
index 0e98d66..98d0ffe 100644
--- a/src/Desktop/FolderInfo.cc
+++ b/src/Desktop/FolderInfo.cc
@@ -183,7 +183,6 @@ bool FolderInfo::read(const Path& folderPath,std::map<std::string,std::string>&
 
 	Tokenizer parse(",");
 	vector<string> n;
-	int cnt=0;
 	std::size_t pos;
 	
 	while(getline(in,line))
diff --git a/src/Desktop/MvQColourLine.cc b/src/Desktop/MvQColourLine.cc
index 47c2233..f5a2654 100644
--- a/src/Desktop/MvQColourLine.cc
+++ b/src/Desktop/MvQColourLine.cc
@@ -228,9 +228,7 @@ void MvQColourLine::slotHelperEdited(const vector<string>& values)
 				return;
 			}	
 		}
-		
-		int currentPrev=colCb_->currentIndex();
-		
+
 		QString name=QString::fromStdString(values[0]);
 		//This sets the current index as well
 		setCustomColour(MvQPalette::magics(values[0]),name,name,true);
diff --git a/src/Desktop/MvQDetailedFolderView.cc b/src/Desktop/MvQDetailedFolderView.cc
index bbbbd17..7f3cc3c 100644
--- a/src/Desktop/MvQDetailedFolderView.cc
+++ b/src/Desktop/MvQDetailedFolderView.cc
@@ -566,10 +566,7 @@ void MvQDetailedFolderView::dropEvent(QDropEvent *event)
 	  	event->ignore();
 		return;
 	}	
-	
-	QPoint scrollOffset(horizontalScrollBar()->value(),verticalScrollBar()->value());
-	QPoint pos=event->pos()+scrollOffset;
-	
+
 	//--------------------------------------
 	// Drag and drop from another folder
 	//--------------------------------------
diff --git a/src/Desktop/MvQFolderItemProperty.cc b/src/Desktop/MvQFolderItemProperty.cc
index 9a4f16a..b2e3a83 100644
--- a/src/Desktop/MvQFolderItemProperty.cc
+++ b/src/Desktop/MvQFolderItemProperty.cc
@@ -196,8 +196,7 @@ QRect MvQClassicIconItemProperty::iconRect(QString name)
 
 
 QRect MvQClassicIconItemProperty::textRect(QString name) 
-{
-  	QSize s=size(name);		 
+{ 
   	return QRect(paddingX_,
 		      paddingY_+iconSize_+textOffset_,
 		      textWidth(name),
@@ -295,7 +294,6 @@ QPoint MvQSimpleIconItemProperty::position(QString, QPoint refPos)
 QPoint MvQSimpleIconItemProperty::positionFromHotSpot(QString name, QPoint pos,QPointF hotSpotAtPos)
 {	
 	//hotSpotAtPos is the relative position inside the icon pixmap 		
-	QSize s=size(name);
 	QPoint d(iconSize_*hotSpotAtPos.x(),iconSize_*hotSpotAtPos.y());
   	return QPoint(pos.x()-d.x()-paddingX_,pos.y()-d.y()-paddingY_);
 }	
@@ -326,9 +324,8 @@ QPoint MvQSimpleIconItemProperty::adjsutReferencePosition(QString /*name*/,QStri
 	return QPoint();
 }
 
-QRect MvQSimpleIconItemProperty::iconRect(QString name)
+QRect MvQSimpleIconItemProperty::iconRect(QString /*name*/)
 {
-  	QSize s=size(name);
 	return QRect(paddingX_,
 		     paddingY_,
 		     iconSize_,
diff --git a/src/Desktop/MvQFolderItemProperty.h b/src/Desktop/MvQFolderItemProperty.h
index f76a78b..8e6602c 100644
--- a/src/Desktop/MvQFolderItemProperty.h
+++ b/src/Desktop/MvQFolderItemProperty.h
@@ -22,7 +22,8 @@ class MvQAbstractIconItemProperty
 {
 public:   	
   	MvQAbstractIconItemProperty();
-	
+    virtual ~MvQAbstractIconItemProperty() {}
+
 	int iconSize() const {return iconSize_;}
 	QFont font() const {return font_;}
 	float scaling() const {return scaling_;}
@@ -160,4 +161,4 @@ protected:
 	
 };
 
-#endif
\ No newline at end of file
+#endif
diff --git a/src/Desktop/MvQFolderViewBase.cc b/src/Desktop/MvQFolderViewBase.cc
index e1b3fd3..ba56269 100644
--- a/src/Desktop/MvQFolderViewBase.cc
+++ b/src/Desktop/MvQFolderViewBase.cc
@@ -635,9 +635,6 @@ MvQIconMimeData *MvQFolderViewBase::buildClipboardData(IconObject *dragObj,QList
 			//Pixmap rect of the drag object
 			QRect rect=pixmapRect(dragObj);
 				
-			//Find bounding box for selected pixmap rects				
-			QRect bbox=pixmapRect(objLst);
-		
 			for(int i=0; i < objLst.count(); i++)
 			{
 			 	QRect vr=pixmapRect(objLst[i]);
diff --git a/src/Desktop/MvQIconFolderView.cc b/src/Desktop/MvQIconFolderView.cc
index 1ab7c0a..d83a148 100644
--- a/src/Desktop/MvQIconFolderView.cc
+++ b/src/Desktop/MvQIconFolderView.cc
@@ -1727,8 +1727,7 @@ QGraphicsItem *MvQIconFolderView::findByKey(int key)
   	if(sLst.size()>0) current=sLst.at(0);
 	 
 	QRectF rect=current->boundingRect();
-	rect.moveTo(current->pos());
-	QRectF initialRect = rect;
+	rect.moveTo(current->pos());	
  
 	QSizeF contents = sceneRect().size();
     	QList<QGraphicsItem*> intersectVector;
@@ -1917,4 +1916,4 @@ void MvQIconFolderView::showIcon(const QModelIndex& index)
 		ensureVisible(item);
 		selectOnlyOneItem(item);
 	}	
-}
\ No newline at end of file
+}
diff --git a/src/Desktop/MvQPageView.cc b/src/Desktop/MvQPageView.cc
index e75df1d..6a72169 100644
--- a/src/Desktop/MvQPageView.cc
+++ b/src/Desktop/MvQPageView.cc
@@ -1496,11 +1496,10 @@ void MvQPageView::pagesResized(QList<MvQPageItem*> pages,QList<QRectF> oriPaperR
 {
   	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
 	cmdParent->setText("resize");
-     
-	MvQPageResizeCommand *cmd;
+
 	for(int i=0; i < pages.count(); i++)
 	{
-		cmd = new MvQPageResizeCommand(this,pages[i],oriPaperRects[i],pages.at(i)->paperRect(),cmdParent);	
+        new MvQPageResizeCommand(this,pages[i],oriPaperRects[i],pages.at(i)->paperRect(),cmdParent);
 	}	
 	  
 	undoStack_->push(cmdParent);
@@ -1513,10 +1512,9 @@ void MvQPageView::pagesMoved(QList<MvQPageItem*> pages,const QPointF& delta)
   	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
 	cmdParent->setText("move");
     
-	MvQPageMoveCommand *cmd;
 	foreach(MvQPageItem *item,pages)
 	{
-		cmd = new MvQPageMoveCommand(this,item,delta,cmdParent);	
+        new MvQPageMoveCommand(this,item,delta,cmdParent);
 	}
 	
 	undoStack_->push(cmdParent);
@@ -1532,10 +1530,9 @@ void MvQPageView::duplicateSelection()
   	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
 	cmdParent->setText("duplicate");
 		
-	MvQPageAddCommand *cmd;
 	foreach(MvQPageItem* item,selector_->pages())
 	{
-		cmd = new MvQPageAddCommand(this,item,cmdParent);     		
+        new MvQPageAddCommand(this,item,cmdParent);
 	}
 	
 	undoStack_->push(cmdParent);		
@@ -1549,10 +1546,9 @@ void MvQPageView::deleteSelection()
   	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
 	cmdParent->setText("delete");
 		
-	MvQPageDeleteCommand *cmd;
 	foreach(MvQPageItem* item,selector_->pages())
 	{
-		cmd = new MvQPageDeleteCommand(this,item,cmdParent);     		
+        new MvQPageDeleteCommand(this,item,cmdParent);
 	}
 	
 	undoStack_->push(cmdParent);		
@@ -1575,10 +1571,9 @@ void MvQPageView::splitSelection(int row, int column)
 	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
 	cmdParent->setText("split");
 	
-	MvQPageSplitCommand *cmd;
 	foreach(MvQPageItem* item,selector_->pages())
 	{
-		cmd = new MvQPageSplitCommand(this,item,row,column,cmdParent);     		
+        new MvQPageSplitCommand(this,item,row,column,cmdParent);
 	}
 	
 	undoStack_->push(cmdParent);
@@ -1592,7 +1587,6 @@ void MvQPageView::expandSelection()
   	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
 	cmdParent->setText("expand");
 		
-	MvQPageExpandCommand *cmd;
 	QRectF selRect=selector_->mapToParent(selector_->boundingRect()).boundingRect();
 	QRectF expandRect=superPage_->boundingRect();
 	
@@ -1603,7 +1597,7 @@ void MvQPageView::expandSelection()
 	  	QRectF r=superPage_->itemToPercentage(item->rectToSelector(expandRect,selRect));
 	  	qDebug() << "  item" << item->paperRect() << r;
 		
-		cmd = new MvQPageExpandCommand(this,item,r,cmdParent);     		
+        new MvQPageExpandCommand(this,item,r,cmdParent);
 	}
 	
 	undoStack_->push(cmdParent);		
@@ -1638,13 +1632,12 @@ void MvQPageView::disconnectSelection()
 	
 	MvQUndoCommand *cmdParent = new MvQUndoCommand(this,0);
 	cmdParent->setText("disconnect");
-		
-	MvQPageDisconnectCommand *cmd; 
+		 
 	foreach(MvQPageItem* item,selector_->pages())
 	{
 		if(item->hasSubPaperRect())
 		{  
-			cmd = new MvQPageDisconnectCommand(this,item,cmdParent);    
+            new MvQPageDisconnectCommand(this,item,cmdParent);
 		}
 	}
 	
diff --git a/src/Desktop/MvQRequestPanelLine.cc b/src/Desktop/MvQRequestPanelLine.cc
index f521d9b..de2e5b9 100644
--- a/src/Desktop/MvQRequestPanelLine.cc
+++ b/src/Desktop/MvQRequestPanelLine.cc
@@ -25,10 +25,10 @@
 MvQRequestPanelLine::MvQRequestPanelLine(RequestPanel& owner,const Parameter& param, bool buildLine) : 
 	RequestPanelItem(owner,param),
 	defaultTb_(0),
-	gray_(false),
-	helper_(0),
 	helpTb_(0),
-	parentWidget_(owner.parentWidget())
+    gray_(false),
+    helper_(0),
+    parentWidget_(owner.parentWidget())
 {	
 	if(!buildLine)
 	  	return;
diff --git a/src/Download/CMakeLists.txt b/src/Download/CMakeLists.txt
new file mode 100644
index 0000000..68dc1bb
--- /dev/null
+++ b/src/Download/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+ecbuild_add_executable( TARGET       Download
+                        SOURCES      Download.cc
+                        DEFINITIONS  ${METVIEW_EXTRA_DEFINITIONS}
+                        INCLUDES     ${METVIEW_STANDARD_INCLUDES}
+                        LIBS         ${STANDARD_METVIEW_LIBS}
+                    )
+
+
+metview_module_files(ETC_FILES ObjectSpec.Download
+                               DownloadDef
+                     SVG_FILES DOWNLOAD.svg)
diff --git a/src/Download/DOWNLOAD.svg b/src/Download/DOWNLOAD.svg
new file mode 100644
index 0000000..5b27857
--- /dev/null
+++ b/src/Download/DOWNLOAD.svg
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32"
+   height="32"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="DOWNLOAD.svg"
+   style="display:inline"
+   inkscape:export-xdpi="180"
+   inkscape:export-ydpi="180"
+   sodipodi:version="0.32"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/var/tmp/cgi/git/metview/src/Download/DOWNLOAD.png">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient5324">
+      <stop
+         id="stop5326"
+         offset="0"
+         style="stop-color:#2270c7;stop-opacity:1;" />
+      <stop
+         id="stop5328"
+         offset="1"
+         style="stop-color:#bec0f6;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5268">
+      <stop
+         style="stop-color:#2270c7;stop-opacity:1;"
+         offset="0"
+         id="stop5270" />
+      <stop
+         style="stop-color:#bec0f6;stop-opacity:1"
+         offset="1"
+         id="stop5272" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5246"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#668000;stop-opacity:1;"
+         offset="0"
+         id="stop5248" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622-8">
+      <stop
+         style="stop-color:#c6cee3;stop-opacity:1;"
+         offset="0"
+         id="stop3624-3" />
+      <stop
+         style="stop-color:#eaeef9;stop-opacity:0;"
+         offset="1"
+         id="stop3626-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4749">
+      <stop
+         id="stop4751"
+         offset="0"
+         style="stop-color:#2c936f;stop-opacity:1;" />
+      <stop
+         id="stop4753"
+         offset="1"
+         style="stop-color:#d0e0d1;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5324"
+       id="linearGradient5274"
+       x1="7.2826061"
+       y1="16.28569"
+       x2="24.329329"
+       y2="16.28569"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-31.898305,28.400855)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5324"
+       id="linearGradient5336"
+       x1="5.2868624"
+       y1="48.438992"
+       x2="26.258589"
+       y2="48.438992"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.85370838,0,0,0.92184449,2.6249888,4.3150578)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="14.170032"
+     inkscape:cx="-5.9536924"
+     inkscape:cy="17.54612"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     width="64px"
+     inkscape:snap-grids="true"
+     inkscape:window-width="1620"
+     inkscape:window-height="1096"
+     inkscape:window-x="1968"
+     inkscape:window-y="81"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2816"
+       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:license
+           rdf:resource="Apache License 2.0" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title />
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>ECMWF</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:language>en-GB</dc:language>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>Metview icon</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <dc:description>Metview icon</dc:description>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="frame"
+     style="display:inline"
+     transform="translate(0,-32)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="item"
+     transform="translate(0,-32)"
+     style="display:inline">
+    <path
+       sodipodi:type="arc"
+       style="fill:none;stroke:#7c9ee2;stroke-width:0.91649183000000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
+       id="path5322"
+       sodipodi:cx="18"
+       sodipodi:cy="17"
+       sodipodi:rx="14"
+       sodipodi:ry="14"
+       d="M 32,17 A 14,14 0 1 1 4,17 14,14 0 1 1 32,17 z"
+       transform="matrix(1.0911172,0,0,1.0911172,-3.5808243,29.498293)" />
+    <path
+       style="fill:url(#linearGradient5336);fill-opacity:1;stroke:#0b274c;stroke-width:0.88712257px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 11.782602,38.39669 8.770263,0.02662 -0.275369,13.635127 4.337816,0.06505 -8.494891,7.416375 -8.5551388,-7.286263 4.1570738,-0.130112 z"
+       id="path3028"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/var/tmp/cgi/git/metview/src/Download/DOWNLOAD_64.png"
+       inkscape:export-xdpi="180"
+       inkscape:export-ydpi="180"
+       sodipodi:nodetypes="cccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="box"
+     style="display:none">
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="rect3195"
+       width="31.226377"
+       height="31.261541"
+       x="0.47710654"
+       y="0.4906483"
+       inkscape:export-filename="/var/tmp/cgi/git/metview/src/Download/DOWNLOAD_64.png"
+       inkscape:export-xdpi="180"
+       inkscape:export-ydpi="180" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="text"
+     style="display:inline"
+     transform="translate(0,-32)">
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot4691"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none"
+       transform="translate(0,32)"><flowRegion
+         id="flowRegion4693"><rect
+           id="rect4695"
+           width="10.360623"
+           height="14.985902"
+           x="-0.074004449"
+           y="-5.8902793" /></flowRegion><flowPara
+         id="flowPara4697" /></flowRoot>  </g>
+</svg>
diff --git a/src/Download/Download.cc b/src/Download/Download.cc
new file mode 100755
index 0000000..b17a721
--- /dev/null
+++ b/src/Download/Download.cc
@@ -0,0 +1,208 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include <fstream>
+#include <sstream>
+#include <Metview.h>
+#include <MvScanFileType.h>
+#include <MvNetwork.h>
+#include <MvPath.hpp>
+
+
+class Download : public MvService {
+public:
+    Download(char *name) : MvService(name) {};
+    void serve(MvRequest&,MvRequest&);
+    bool sanitiseUrl(std::string &url);
+};
+
+
+// --------------------------------------------------------
+// filetoString
+// utility function to read a text file into a std::string
+// --------------------------------------------------------
+
+std::string filetoString(std::string filename)
+{
+    // open the file
+    std::ifstream ifStream;
+    ifStream.open(filename.c_str());
+
+    // get the text stream and convert into a string
+    std::stringstream stream;
+    stream << ifStream.rdbuf();
+    string str = stream.str();
+    return str;
+}
+
+
+// --------------------------------------------------------------------
+// replace_all
+// utility function to replace all occurences of a string with another.
+// Code taken from ECMWF's ecFlow.
+// --------------------------------------------------------------------
+
+bool replace_all(std::string& subject, const std::string& search, const std::string& replace)
+{
+    bool replaced = false;
+    size_t pos = 0;
+    while ((pos = subject.find(search, pos)) != std::string::npos)
+    {
+        subject.replace(pos, search.length(), replace);
+        pos += replace.length();
+        replaced = true;
+    }
+    return replaced;
+}
+
+
+// --------------------------------------------------------------------
+// Download::sanitiseUrl
+// Utility function to remove/replace unwanted characters from the URL.
+// Returns true if any strings were replaced.
+// --------------------------------------------------------------------
+
+bool Download::sanitiseUrl(std::string &url)
+{
+    bool replaced = replace_all(url, " ", "%20");
+    return replaced;
+}
+
+
+
+// ------------------------------------
+// Download::serve
+// Main function, performs the download
+// ------------------------------------
+
+void Download::serve(MvRequest& in,MvRequest& out)
+{
+
+    cout << "Entry Download::serve..." << endl;
+    in.print();
+
+
+    // if the URL is not supplied, abort immediately
+    const char *url = in("URL");
+    if (!url)
+    {
+        setError(1, "URL has not been supplied");
+        return;
+    }
+
+
+    // get the target path (optional parameter)
+    string target;
+    string errText;
+    if (!in.getPath("TARGET", target, true, errText))
+    {
+        marslog(LOG_EROR, "%s", errText.c_str());
+        setError(1);
+        return;
+    }
+
+
+    string urlStr(url);
+    bool urlChanged = sanitiseUrl(urlStr);
+    
+    if (urlChanged)
+    {
+        cout << "URL sanitised to this:" << endl;
+        cout << urlStr << endl;
+    }
+
+
+    // perform the network transfer
+    string outname(marstmp());
+
+    MvNetwork *net=new MvNetwork();
+    bool ok = net->get(urlStr, outname, "", errText);
+
+    if (!ok)
+    {
+        marslog(LOG_EROR, "Failed to download data: %s", errText.c_str());
+        setError(1);
+        return;
+    }
+
+
+    string h=net->header();
+    long responseCode = net->responseCode();
+    cout << "header " << h << endl;
+    cout << "response code: " << responseCode << endl;
+    char responseCodeString[32];
+    sprintf(responseCodeString, "%ld", responseCode);
+
+
+    // decide whether we got the right thing back or not
+    bool gotData = responseCode/100 == 2;  // code is 2xx
+
+    if (!gotData)
+    {
+        if (FileHasValidSize(outname.c_str()))
+        {
+            // in this case, we got an error, but also a file
+            // - ASSUME that this file contains error information,
+            // and therefore print it out
+            std::string logtext = filetoString(outname);
+            cout << "Log text:" << endl;
+            cout << logtext;
+            replace_all(logtext, "\n", " "); // remove newlines for the error reporting
+            string errorMsg = "Error code returned; message from server:";
+            marslog(LOG_EROR, "%s", errorMsg.c_str());
+            marslog(LOG_EROR, "%s", logtext.c_str());
+            setError(1);
+            return;
+        }
+        else
+        {
+            marslog(LOG_EROR, "Got error response code from server: %s", responseCodeString);
+            setError(1);
+            return;
+        }
+    }
+
+
+    // if we got to here, the download seems to have been ok
+    // if the user specified a TARGET, we should copy the file there
+    if (!target.empty())
+    {
+        string copyCommand = "cp " + outname + " \"" + target + "\"";
+        cout << "Copy: " << copyCommand << endl;
+        int ret2 = system(copyCommand.c_str());
+
+        if (ret2 != 0)
+        {
+            marslog(LOG_EROR,"Failed to copy file to TARGET destination. Command was: ");
+            marslog(LOG_EROR," %s", copyCommand.c_str());
+            setError(1, "Failed to copy file to TARGET location.");
+            return;
+        }
+    }
+
+
+    // Create output request
+    string iconType = ScanFileType(outname.c_str());  // dynamically find the type
+    out.setVerb(iconType.c_str());
+    out("PATH") = outname.c_str();
+    out("_RESPONSE_CODE") = responseCodeString;
+
+    out.print();
+
+    return;
+}
+
+
+int main(int argc,char **argv)
+{
+   MvApplication theApp(argc,argv);
+   Download data("DOWNLOAD");
+
+   theApp.run();
+}
diff --git a/src/Download/DownloadDef b/src/Download/DownloadDef
new file mode 100644
index 0000000..dd68f82
--- /dev/null
+++ b/src/Download/DownloadDef
@@ -0,0 +1,12 @@
+DOWNLOAD; Metview; Specific Application
+{
+        URL [interface =  scrolled_text]
+        {
+                @
+        } = ''
+
+        TARGET
+        {
+                @
+        } = ''
+}
diff --git a/src/Download/ObjectSpec.Download b/src/Download/ObjectSpec.Download
new file mode 100644
index 0000000..cb8b992
--- /dev/null
+++ b/src/Download/ObjectSpec.Download
@@ -0,0 +1,29 @@
+################################################################################
+#
+#	ObjectSpec.Download
+#
+
+object,
+	class		= DOWNLOAD,
+	icon_box	= Data Access,
+	can_be_created	= True,
+	definition_file	= '$METVIEW_DIR/share/metview/etc/DownloadDef',
+	#rules_file	= '$METVIEW_DIR/share/metview/etc/DownloadRules',
+	default_name	= Download,
+	help_page	= Download,
+	type		= Data,
+	expand		= 0,
+	macro		= download,
+	editor_type	= SimpleEditor,
+	pixmap		= '$METVIEW_DIR/share/metview/icons/DOWNLOAD.icon'
+
+state,
+	class		= DOWNLOAD,
+	output_class= GRIB/BUFR/GEOPOINTS/NETCDF/TABLE,
+	service		= Download
+
+service,
+	cmd		= '$METVIEW_CMD $METVIEW_BIN/Download',
+	name		=  Download,
+	fullname	=  Download
+
diff --git a/src/Hovmoeller/HovToolkit.cc b/src/Hovmoeller/HovToolkit.cc
index c99ae34..42314f0 100644
--- a/src/Hovmoeller/HovToolkit.cc
+++ b/src/Hovmoeller/HovToolkit.cc
@@ -394,7 +394,7 @@ bool HovToolkit::CreateParamInfo(MvRequest& data)
 //   iter.sort("DATE");
    iter.sort("EXPVER");
    iter.sort("PARAM");
-   while( field = iter() )
+   while( (field = iter()) )
    {
       // MvFieldExpander	x(field);
       MvRequest rq=field.getRequest();
@@ -596,7 +596,7 @@ bool HovToolkit::GenerateData(MvRequest& data)
    string lastKey = "FIRSTFIELD";
    MvField field, lastField;
    ParamIterator paramIter;
-   while( field = iter() )
+   while( (field = iter()) )
    {
       currentGenerated++;
 
diff --git a/src/Macro/grib.cc b/src/Macro/grib.cc
index 4ade188..5b00308 100644
--- a/src/Macro/grib.cc
+++ b/src/Macro/grib.cc
@@ -39,6 +39,13 @@ enum eGridLatLonsType
     GLL_LONS
 };
 
+// used in function GribDateFunction
+enum eGribDateType
+{
+    GDT_BASE = 0,
+    GDT_VALID
+};
+
 
 double CovarFunc( field*, field*, const MvGeoBox& );
 
@@ -2161,6 +2168,44 @@ Value SetGridValsFunction::Execute(int /*arity*/,Value *arg)
 }
 
 
+//=============================================================================
+
+class GribDateFunction : public Function {
+    eGribDateType type;
+public:
+	GribDateFunction(const char *n, eGribDateType t) : Function(n,1,tgrib), type(t)
+	{info = "Returns a single or list of base/valid dates for the given fieldset.";}
+	virtual Value Execute(int arity,Value *arg);
+};
+
+
+Value GribDateFunction::Execute(int, Value *arg)
+{
+	fieldset *fs;
+	arg[0].GetValue(fs);   // get the fieldset variable
+
+	CList *l = new CList(fs->count); // initialise the resulting list
+
+	for(int i = 0; i < fs->count; i++)
+	{
+		field  *h = GetIndexedFieldWithAtLeastPackedMem(fs,i);
+		MvField *mvfield = new MvField(h);
+		double baseDate = mvfield->yyyymmddFoh();
+		double dateAsNumber = baseDate;
+		if (type == GDT_VALID)  // valid_date requested? then add the step
+			dateAsNumber += mvfield->stepFoh();
+
+		Date d(dateAsNumber);
+		(*l)[i] = d;
+	}
+
+
+	// if only one field, then just return a single date, otherwise return the list
+	if (l->Count() > 1)
+		return Value(l);
+	else
+		return Value((*l)[0]);
+}
 
 //=============================================================================
 
@@ -5785,10 +5830,15 @@ static void install(Context *c)
 	c->AddFunction(new GridLatLonsFunction("longitudes", GLL_LONS, false));              // new version
 	c->AddFunction(new GridLatLonsFunction("gridlons",   GLL_LONS, true, "longitudes")); // deprecated version
 
-
 	c->AddFunction(new SetGridValsFunction("set_values",   false));                // new version
 	c->AddFunction(new SetGridValsFunction("set_gridvals", true, "set_values"));   // deprecated version
 
+
+	c->AddFunction(new GribDateFunction("base_date",  GDT_BASE));
+	c->AddFunction(new GribDateFunction("valid_date", GDT_VALID));
+
+
+
 #if 0
 	c->AddFunction(new SpectrumFunction("spectrum"));
 #endif
@@ -5819,7 +5869,7 @@ static void install(Context *c)
 	c->AddFunction(new GribHeaderFunctionW("grib_set_string", GRIB_STRING));
 	c->AddFunction(new GribHeaderFunctionWGeneric("grib_set"));
 
-   c->AddFunction(new FillMVEWFunction("fill_missing_values_ew"));
+	c->AddFunction(new FillMVEWFunction("fill_missing_values_ew"));
 }
 
 static Linkage linkage(install);
diff --git a/src/Macro/include/macro.h b/src/Macro/include/macro.h
index d33a936..4688b8f 100644
--- a/src/Macro/include/macro.h
+++ b/src/Macro/include/macro.h
@@ -17,8 +17,6 @@
 #include "value.h"
 #include "node.h"
 
-static const char* M_UPLOT = "uPlotManager";
-
 class Context;
 class CObject;
 
diff --git a/src/Macro/mlist.cc b/src/Macro/mlist.cc
index e178934..e458c52 100644
--- a/src/Macro/mlist.cc
+++ b/src/Macro/mlist.cc
@@ -363,7 +363,7 @@ Value ListFindFunction::Execute(int arity,Value *arg)
         {
             CList *outlist = new CList(results.size());
 
-            for(int i=0; i < results.size(); i++)
+            for(unsigned int i=0; i < results.size(); i++)
             {
                 (*outlist)[i] = results[i];
             }
diff --git a/src/Macro/request.cc b/src/Macro/request.cc
index 34529ba..da31e34 100644
--- a/src/Macro/request.cc
+++ b/src/Macro/request.cc
@@ -22,6 +22,9 @@ static Cache LangCache;
 static Cache TestCache;
 static Cache ObjsCache;
 
+static const char* M_UPLOT = "uPlotManager";
+
+
 static const char *find_service(const char *verb,const char *mode)
 {
 	char *state = strcache("state");
diff --git a/src/Macro/value.cc b/src/Macro/value.cc
index f81fc65..c719ffe 100644
--- a/src/Macro/value.cc
+++ b/src/Macro/value.cc
@@ -525,7 +525,7 @@ Value::~Value()
 
 const char *Value::TypeName(vtype t)
 {
-	for(int i = 0;i<NUMBER(types);i++)
+	for(unsigned int i = 0;i<NUMBER(types);i++)
 		if(types[i].t == t)
 			return types[i].n;
 	return "unknown";
@@ -534,7 +534,7 @@ const char *Value::TypeName(vtype t)
 vtype Value::NameType(const char *n)
 {
 	if(n == 0) return tany;
-	for(int i = 0;i<NUMBER(types);i++)
+	for(unsigned int i = 0;i<NUMBER(types);i++)
 		if(strcmp(types[i].n,n) == 0)
 			return types[i].t;
 	return tnone;
diff --git a/src/MacroEditor/FindTextDialog.cc b/src/MacroEditor/FindTextDialog.cc
index ee3af33..3d50e28 100644
--- a/src/MacroEditor/FindTextDialog.cc
+++ b/src/MacroEditor/FindTextDialog.cc
@@ -140,6 +140,15 @@ void FindTextDialog::onReplaceAllButtonClicked()
     emit replaceAll(findComboBox->currentText(), replaceComboBox->currentText(), findFlags());
 }
 
+// ---------------------------------------------------------------------------
+// FindTextDialog::onSelectionChanged
+// triggered when the selection in the main editor is changed
+// ---------------------------------------------------------------------------
+
+void FindTextDialog::onSelectionChanged(bool isSelection)
+{
+    replaceButton->setEnabled(isSelection);  // only enable this button if there is a selection
+}
 
 
 // ---------------------------------------------------------------------------
diff --git a/src/MacroEditor/FindTextDialog.h b/src/MacroEditor/FindTextDialog.h
index 26d787e..676565e 100644
--- a/src/MacroEditor/FindTextDialog.h
+++ b/src/MacroEditor/FindTextDialog.h
@@ -44,6 +44,7 @@ public slots:
     void onReplaceButtonClicked();
     void onReplaceSelectedButtonClicked();
     void onReplaceAllButtonClicked();
+    void onSelectionChanged(bool);
 
 
 private:
diff --git a/src/MacroEditor/FindTextDialog.ui b/src/MacroEditor/FindTextDialog.ui
index 776d04d..3c4e0cc 100644
--- a/src/MacroEditor/FindTextDialog.ui
+++ b/src/MacroEditor/FindTextDialog.ui
@@ -140,7 +140,7 @@
        <item>
         <widget class="QPushButton" name="replaceButton">
          <property name="text">
-          <string>&Replace Next</string>
+          <string>&Replace Selection</string>
          </property>
         </widget>
        </item>
diff --git a/src/MacroEditor/MacroEdit.cc b/src/MacroEditor/MacroEdit.cc
index e05966e..d1189e8 100644
--- a/src/MacroEditor/MacroEdit.cc
+++ b/src/MacroEditor/MacroEdit.cc
@@ -1028,6 +1028,10 @@ void MacroEdit::showFindDialog(bool showReplaceOptions)
                 this, SLOT(replaceStringInFile(const QString &,const QString &,QTextDocument::FindFlags)));
 
         connect(findDialog_, SIGNAL(rejected()), this, SLOT(findClosed()));
+
+        connect(textEditor, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged()));
+
+        connect(this, SIGNAL(selectionChanged(bool)), findDialog_, SLOT(onSelectionChanged(bool)));
     }
 
 
@@ -1171,7 +1175,15 @@ void MacroEdit::findString(const QString &s,QTextDocument::FindFlags flags, bool
 
 void MacroEdit::replaceString(const QString &s,const QString &r,QTextDocument::FindFlags flags)
 {
-    findString(s, flags, true, r);
+    // perform the 'replace'
+    textEditor->insertPlainText (r);
+
+    // highlight the replaced text - the current text cursor will be
+    // at the end of the replaced text, so we move it back to the start
+    // (anchored so that the text is selected)
+    QTextCursor cursor = textEditor->textCursor();   // get the document's cursor
+    cursor.movePosition(QTextCursor::Left, QTextCursor::KeepAnchor, r.length());
+    textEditor->setTextCursor(cursor);               // send the cursor back to the document
 }
 
 
@@ -1584,6 +1596,23 @@ void MacroEdit::onRunOptionsChanged (MacroRunOptions options)
 
 
 
+// ---------------------------------------------------------------------------
+// MacroEdit::onSelectionChanged
+// triggered when the user changes the text selection
+// ---------------------------------------------------------------------------
+
+void MacroEdit::onSelectionChanged()
+{
+    // if the find/replace dialogue is open, it needs to know about the change
+
+    if (findDialog_)
+    {
+        bool isSelection = textEditor->textCursor().hasSelection();
+        emit selectionChanged(isSelection);
+    }
+}
+
+
 
 // ---------------------------------------------------------------------------
 // MacroEdit::onReadOnlyStatusChanged
diff --git a/src/MacroEditor/MacroEdit.h b/src/MacroEditor/MacroEdit.h
index cd2b8cd..ae400b5 100644
--- a/src/MacroEditor/MacroEdit.h
+++ b/src/MacroEditor/MacroEdit.h
@@ -242,6 +242,7 @@ public slots:
     void gotoLine();
     void gotoLine(int line);
     void onIndentLines();
+    void onSelectionChanged();
     void onCommentLines();
     void tabsDialog();
     void runDialog();
@@ -286,6 +287,10 @@ public slots:
     void setAutoInsertLicenceOn()  {setAutoInsertLicence(true);};
     void setAutoInsertLicenceOff() {setAutoInsertLicence(false);};
 
+signals:
+    void selectionChanged(bool);
+
+
 private:
     void setupEditor();
     bool AskToSave();
diff --git a/src/MvApp/geo_to_grib.cc b/src/MvApp/geo_to_grib.cc
index 84ededa..7f68440 100644
--- a/src/MvApp/geo_to_grib.cc
+++ b/src/MvApp/geo_to_grib.cc
@@ -29,6 +29,9 @@ const int   cLatBandCount = (int)( 180.0 / cLatBandSize ) + 1;
 const int   G2G_RECIPROCAL       = 0;
 const int   G2G_EXPONENTIAL_MEAN = 1;
 const int   G2G_EXPONENTIAL_SUM  = 2;
+const int   G2G_NEAREST_MEAN     = 3;
+const int   G2G_NEAREST_SUM      = 4;
+const int   G2G_NEAREST_COUNT    = 5;
 
 double makeDateNumber( long date, long time );
 
@@ -65,6 +68,9 @@ public:
     bool estimate();
     bool estimateToUserGrid();
     bool estimateToTemplateGrid();
+    bool estimateNearestToTemplateGrid();
+    void setupUserMatrix(bool zero);
+    bool convertUserToTemplateGrid();
     double value(float lat, float lon);
     void sortPoints();
     string &errorMessage() {return errorMessage_;};
@@ -170,8 +176,14 @@ ToMatrix::ToMatrix(MvRequest& def)
         Weight_ = G2G_RECIPROCAL;
     else if ( st == "EXPONENTIAL_MEAN" )
         Weight_ = G2G_EXPONENTIAL_MEAN;
-    else
+    else if ( st == "EXPONENTIAL_SUM" )
         Weight_ = G2G_EXPONENTIAL_SUM;
+    else if ( st == "NEAREST_GRIDPOINT_MEAN" )
+        Weight_ = G2G_NEAREST_MEAN;
+    else if ( st == "NEAREST_GRIDPOINT_SUM" )
+        Weight_ = G2G_NEAREST_SUM;
+    else
+        Weight_ = G2G_NEAREST_COUNT;
 
 
     MvRequest data;
@@ -294,17 +306,30 @@ void ToMatrix::sortPoints()
 
 bool ToMatrix::estimate()
 {
-    if (gribDefMode == User)
-        return estimateToUserGrid();
+    if (Weight_ == G2G_NEAREST_MEAN || Weight_ == G2G_NEAREST_SUM || Weight_ == G2G_NEAREST_COUNT)
+    {
+        //  if User, convert to Template, because we need that on order to use these modes
+
+        if (gribDefMode == User)
+            if (!convertUserToTemplateGrid())
+                return false;
+
+        return estimateNearestToTemplateGrid();
+    }
     else
-        return estimateToTemplateGrid();
+    {
+        if (gribDefMode == User)
+            return estimateToUserGrid();
+        else
+            return estimateToTemplateGrid();
+    }
 }
+
+
 //_____________________________________________________________________
 
-bool ToMatrix::estimateToUserGrid()
+void ToMatrix::setupUserMatrix(bool zero)
 {
-  int   i, j;
-  float lat,lon;
   double epsilon=0.001;
   
   double oriEast=East;
@@ -340,6 +365,19 @@ bool ToMatrix::estimateToUserGrid()
 #endif
 
   Matrix = new double[NbLon*NbLat];
+  
+  if (zero)
+    memset(Matrix, 0, NbLon*NbLat*sizeof(double));  // set all values to zero
+}
+
+//_____________________________________________________________________
+
+bool ToMatrix::estimateToUserGrid()
+{
+  int   i, j;
+  float lat,lon;
+
+  setupUserMatrix(false);
 
   lat = North;
   for (j = 0; j < NbLat; j++) 
@@ -392,6 +430,106 @@ bool ToMatrix::estimateToTemplateGrid()
 
     return true;
 }
+
+//_____________________________________________________________________
+
+bool ToMatrix::estimateNearestToTemplateGrid()
+{
+    unsigned int *numClosest;
+    templateField->setShape(expand_mem);
+    MvGridBase *grid = templateField->mvGrid();  // be careful with this pointer because MvField is in charge!
+
+    if (!grid->hasLocationInfo())       //-- check that it is ok
+    {
+        errorMessage_ = "Template GRIB field grid locations cannot be read by Metview.";
+        return false;
+    }
+
+    numValsInTemplateGrib = templateField->countValues();
+
+
+    Matrix = new double[numValsInTemplateGrib];               // create the matrix to hold the result
+    memset(Matrix, 0, numValsInTemplateGrib*sizeof(double));  // set all values to zero
+
+
+    if (Weight_ == G2G_NEAREST_MEAN)
+    {
+        // create matrix (zeroed) to store how many gpts are assinged to each grid point
+        numClosest = new unsigned int[numValsInTemplateGrib];  
+        memset(numClosest, 0, numValsInTemplateGrib*sizeof(unsigned int));
+    }
+
+
+    // for each geopoint, find the nearest gridpoint and add the geopoint's value to that gridpoint
+    long ngeo = GPoints.count();
+    for (long i = 0; i < ngeo; i++)
+    {
+        MvGeoP1 gp = GPoints[i];
+        MvGridPoint gridpt = grid->nearestGridpoint(gp.lat_y(), gp.lon_x());
+        if (Weight_ == G2G_NEAREST_COUNT)
+            Matrix[gridpt.index_]++;              // G2G_NEAREST_COUNT
+        else
+            Matrix[gridpt.index_] += gp.value();  // G2G_NEAREST_MEAN or G2G_NEAREST_SUM
+
+
+        if (Weight_ == G2G_NEAREST_MEAN)
+            numClosest[gridpt.index_]++;
+    }
+
+
+    // mean? then divide by the number of points
+    if (Weight_ == G2G_NEAREST_MEAN)
+    {
+        for (long j=0; j<numValsInTemplateGrib; j++)
+            if (numClosest[j] != 0)
+                Matrix[j] /= numClosest[j];
+
+        delete[] numClosest;
+    }
+
+
+    return true;
+}
+
+//_____________________________________________________________________
+
+bool ToMatrix::convertUserToTemplateGrid()
+{
+    // the user has supplied grid parameters, but we want to convert this into
+    // an actual GRIB file so that we can use it as a template
+
+    setupUserMatrix(true);
+
+    string llmatrixpath;
+    if (save(llmatrixpath))
+    {
+        marslog( LOG_INFO, "geo_to_grib: can not write matrix into file %s", llmatrixpath.c_str());
+        return false;
+    }
+
+    string tmpGribFile = marstmp();
+
+    if( LLMatrixToGRIB( llmatrixpath.c_str(), tmpGribFile.c_str() ) )
+    {
+        marslog( LOG_INFO, "geo_to_grib: conversion from geo/LLMatrix to GRIB failed");
+        return false;
+    }
+
+    unlink(llmatrixpath.c_str());  // remove the temporary LLMATRIX file
+
+
+
+
+    MvFieldSet fieldset(tmpGribFile.c_str()) ;  // load it up
+    templateField = new MvField(fieldset[0].libmars_field());
+
+    gribDefMode = Grib;
+
+    return true;
+}
+
+
+
 //_____________________________________________________________________
 
 int ToMatrix::save(string &path)  // returns path to caller
@@ -490,7 +628,7 @@ void GeoToGRIB::serve( MvRequest& in, MvRequest& out )
 
       if( LLMatrixToGRIB( path.c_str(), tmpGribFile.c_str() ) )
       {
-          setError( 1, "geo_to_grib: convertion from geo/LLMatrix to GRIB failed" );
+          setError( 1, "geo_to_grib: conversion from geo/LLMatrix to GRIB failed" );
           return;
       }
 
diff --git a/src/ObsFilter/BufrPicker.cc b/src/ObsFilter/BufrPicker.cc
index d7a3507..7b83b45 100644
--- a/src/ObsFilter/BufrPicker.cc
+++ b/src/ObsFilter/BufrPicker.cc
@@ -414,7 +414,7 @@ BufrPicker::serve( MvRequest& in, MvRequest& out )
    counter_ = 0;                         //-- m a i n   l o o p
    try
    {
-     while( myObs = (*iter_)( obsOrMsg_ ) )
+     while( (myObs = (*iter_)(obsOrMsg_) ) )
      {
         pickValue( myObs );
      }
diff --git a/src/ObsFilter/ObsFilter.cc b/src/ObsFilter/ObsFilter.cc
index c208d12..28f3d5d 100644
--- a/src/ObsFilter/ObsFilter.cc
+++ b/src/ObsFilter/ObsFilter.cc
@@ -744,7 +744,7 @@ ObsFilter :: serve( MvRequest& in, MvRequest& out )
    _counter = 0;                         //-- m a i n   l o o p
    try
    {
-     while( obs_ = (*_iter)( _obsOrMsg ) )
+     while( (obs_ = (*_iter)(_obsOrMsg) ) )
      {
        add();
      }
diff --git a/src/OgcClient/MvQOgcParam.h b/src/OgcClient/MvQOgcParam.h
index 9fca707..d9750d2 100644
--- a/src/OgcClient/MvQOgcParam.h
+++ b/src/OgcClient/MvQOgcParam.h
@@ -30,6 +30,8 @@ public:
 	MvQOgcName(QString requestName, QString displayName) : 
 		requestName_(requestName), displayName_(displayName) {};
 
+    virtual ~MvQOgcName() {}
+
 	QString  requestName() {return requestName_;}
 	void setRequestName(QString s) {requestName_=s;}
 
diff --git a/src/OgcClient/MvQOgcRequest.h b/src/OgcClient/MvQOgcRequest.h
index 01c4011..6671a52 100644
--- a/src/OgcClient/MvQOgcRequest.h
+++ b/src/OgcClient/MvQOgcRequest.h
@@ -18,6 +18,8 @@ class MvQOgcRequest
 {
 public:
 	MvQOgcRequest() {};
+    virtual ~MvQOgcRequest() {}
+
 	const QString& request() const {return request_;} 
 	void setRequest(QString);
 	virtual QString item(QString) const;
diff --git a/src/OgcClient/MvQWmsClient.cc b/src/OgcClient/MvQWmsClient.cc
index bab814f..130b02a 100644
--- a/src/OgcClient/MvQWmsClient.cc
+++ b/src/OgcClient/MvQWmsClient.cc
@@ -1545,7 +1545,11 @@ void MvQWmsUiClient::slotReplyPreview(QNetworkReply* reply)
 
 void MvQWmsUiClient::slotReplyLegend(QNetworkReply* reply)
 {
-	QNetworkRequest r=reply->request();
+    Q_ASSERT(reply == legendReply_);
+
+    qDebug() << "MvQWmsUiClient::slotReplyLegend -->";
+
+    QNetworkRequest r=reply->request();
 	QUrl url=r.url();
 
 	//qDebug() << url.toString();
@@ -1702,7 +1706,9 @@ bool MvQWmsUiClient::legendDownloadActive()
 
 void MvQWmsUiClient::slotAbortDownloadProcess()
 {
-	if(getCapReply_ && getCapReply_->isRunning())
+    qDebug() << "MvQWmsUiClient::slotAbortDownloadProcess -->";
+
+    if(getCapReply_ && getCapReply_->isRunning())
 	{
 		LogItem *log=new LogItem;
 		LogHandler::instance()->add(log);
diff --git a/src/Percentile/Percentile.cc b/src/Percentile/Percentile.cc
index 478ef86..557625d 100644
--- a/src/Percentile/Percentile.cc
+++ b/src/Percentile/Percentile.cc
@@ -137,7 +137,7 @@ bool Percentile::ComputePercentile(MvRequest& out)
 	bool first = true;
 	vfield.reserve(nfsin);
 	vfieldExp.reserve(nfsin);
-	while( field = iter() )
+	while( (field = iter()) )
 	{
 	    vfield.push_back(field);
 	    MvFieldExpander* vex = new MvFieldExpander(field);
diff --git a/src/Scm/ObjectSpec.Scm b/src/Scm/ObjectSpec.Scm
index 9d9ca6b..d856e23 100644
--- a/src/Scm/ObjectSpec.Scm
+++ b/src/Scm/ObjectSpec.Scm
@@ -29,7 +29,8 @@ object,
 	type		= File,
 	default_name    = 'Scm Output Data',
 	pixmap 		= '$METVIEW_DIR_SHARE/icons/SCM_OUTPUT_DATA.icon',
-	editor_type     = QtScmDataEditor 
+	default_method	= Examine,
+	editor_type     = NoEditor 
 
 
 
diff --git a/src/Stations/stat.fmt b/src/Stations/stat.fmt
index df3eaeb..2fe6bba 100644
--- a/src/Stations/stat.fmt
+++ b/src/Stations/stat.fmt
@@ -629,6 +629,7 @@
 02746 5981 2292 28 11 0 ---- HANKO TULLINIEMI
 02747 6038 2210 6 4 0 ---- TURKU RAJAKARI
 02748 6217 2786 83 87 0 ---- JOROINEN VARKAUS AIRPORT
+02749 6631 2940 0 298 0 ---- KUUSAMO OULANKA
 02750 5984 2325 0 3 0 ---- HANKO TVARMINNE
 02751 6163 2138 5 3 0 ---- PORI TAHKOLUOTO HARBOUR
 02752 6220 2117 22 0 0 ---- KRISTIINANKAUPUNKI LIGHTHOUSE
@@ -802,6 +803,7 @@
 02991 6020 2563 27 20 0 ---- PORVOO EMASALO
 02992 6028 2644 4 5 0 ---- LOVIISA ORRENGRUND
 02993 6030 1913 15 3 0 ---- HAMMARLAND MARKET
+02994 6030 2555 0 2 0 ---- PORVOO KILPILAHTI
 02996 6040 2195 7 5 0 ---- RYMATTYLA RAULA
 02997 6009 1993 0 3 0 ---- MARIEHAMN WEST HARBOUR
 02998 6020 2496 25 24 0 ---- HELSINKI KUMPULA
@@ -997,6 +999,7 @@
 03837 5040 -348 0 8 0 ---- BRIXHAM
 03839 5074 -341 0 31 0 ---- EXETER AIRPORT
 03840 5086 -324 252 256 0 PPPP DUNKESWELL AERODROME
+03844 5074 -340 27 31 0 ---- EXETER AIRPORT NO. 2
 03853 5101 -264 20 23 0 ---- YEOVILTON
 03857 5052 -246 52 52 0 ---- ISLE OF PORTLAND
 03862 5078 -184 10 12 0 ---- HURN
@@ -1290,6 +1293,7 @@
 06210 5217 443 1 0 0 ---- VALKENBURG AWS
 06211 5382 295 34 46 0 ---- J6-A
 06212 5292 415 41 51 0 ---- HOORN-A
+06214 5404 604 37 42 0 ---- BUITENGAATS/BG-OHVS2
 06215 5214 444 0 -1 0 ---- VOORSCHOTEN AWS
 06225 5246 455 0 4 0 ---- IJMUIDEN WP
 06229 5300 472 0 1 0 ---- TEXELHORS WP
@@ -1398,7 +1402,7 @@
 06610 4681 694 490 490 0 T-T- PAYERNE
 06611 4689 701 0 435 0 ---- AVENCHES
 06612 4708 679 1018 1018 2 ---- LA CHAUX-DE-FONDS
-06613 4660 766 0 753 0 ---- FRUTIGEN
+06613 4660 766 0 756 0 ---- FRUTIGEN
 06614 4612 702 0 990 0 ---- LES MARECOTTES
 06616 4742 694 598 596 0 ---- FAHY
 06617 4698 661 1050 1050 2 ---- LA BREVINE
@@ -1449,8 +1453,9 @@
 06662 4708 864 0 790 0 ---- SATTEL-AEGERI
 06663 4663 919 0 1242 0 ---- VALS
 06664 4743 852 444 444 0 ---- ZUERICH / AFFOLTERN
+06665 4718 886 0 468 0 ---- LACHEN/GALGENEN
 06666 4760 819 342 341 0 ---- LEIBSTADT
-06668 4667 859 0 1099 0 ---- GOESCHENEN
+06668 4669 860 952 950 2 ---- GOESCHENEN
 06669 4748 840 846 845 2 ---- LAEGERN
 06670 4748 853 427 426 0 ---- ZUERICH / KLOTEN
 06671 4767 898 399 398 0 ---- STECKBORN
@@ -1540,6 +1545,7 @@
 06771 4584 893 352 353 0 ---- STABIO
 06774 4646 967 0 1856 0 ---- BIVIO
 06775 4600 891 0 279 0 ---- LUGANO-AGNO
+06776 4684 978 0 2840 0 ---- WEISSFLUHGIPFEL
 06777 4593 902 1601 1600 2 ---- MONTE GENEROSO
 06778 4665 1027 1969 1968 2 ---- BUFFALORA
 06779 4643 976 1804 1804 2 ---- SEGL-MARIA
@@ -1548,7 +1554,7 @@
 06782 4671 885 1198 1197 2 ---- DISENTIS / SEDRUN
 06783 4646 918 1640 1639 2 ---- S. BERNARDINO
 06784 4681 984 1595 1594 2 ---- DAVOS
-06785 4678 967 1846 1840 2 ---- AROSA
+06785 4679 968 1878 1878 2 ---- AROSA
 06786 4687 952 558 556 0 ---- CHUR
 06787 4661 943 989 987 0 ---- ANDEER
 06788 4635 963 1089 1089 2 ---- VICOSOPRANO
@@ -1570,7 +1576,7 @@
 06805 4708 830 0 426 0 ---- EMMEN
 06806 4698 839 0 442 0 ---- BUOCHS
 06807 4740 863 0 435 0 ---- DUEBENDORF
-06808 4617 888 0 196 0 ---- MAGADINO
+06808 4617 888 0 198 0 ---- MAGADINO
 06809 4630 899 0 259 0 ---- LODRINO
 06810 4708 907 0 447 0 ---- MOLLIS
 06842 4751 926 0 506 0 TPTP SITTERDORF
@@ -1579,7 +1585,7 @@
 06845 4743 788 0 611 0 TPTP RUENENBERG MIL
 06846 4672 951 0 2323 0 ---- SCALOTTAS
 06847 4679 803 0 2280 0 ---- BRIENZER ROTHORN
-06848 4695 960 0 1120 0 ---- VALZEINA
+06848 4697 950 0 1490 0 ---- PFAEFERS
 06849 4723 949 0 436 0 TPTP SALEZ
 06850 4729 889 0 1115 0 ---- BACHTEL
 06851 4724 877 0 496 0 ---- HOMBRECHTIKON
@@ -1602,7 +1608,7 @@
 06990 4713 952 458 457 0 ---- VADUZ
 07002 5073 160 68 73 0 ---- BOULOGNE
 07003 5051 162 20 6 0 ---- LE TOUQUET
-07005 5014 183 74 67 0 ---- ABBEVILLE
+07005 5014 183 72 67 0 ---- ABBEVILLE
 07010 5106 234 16 11 0 ---- DUNKERQUE
 07015 5057 310 47 48 0 ---- LILLE-LESQUIN
 07017 5022 315 77 78 0 ---- CAMBRAI-EPINOY
@@ -1633,16 +1639,16 @@
 07103 4804 -473 81 67 0 ---- POINTE DU RAZ
 07107 4868 -433 18 9 0 ---- BRIGNOGAN
 07108 4846 -443 0 96 0 ---- PLABENNEC-RADAR
-07109 4828 -444 83 51 0 ---- LANVEOC
+07109 4828 -444 83 87 0 ---- LANVEOC
 07110 4844 -441 95 99 0 T-T- BREST-GUIPAVAS
 07112 4862 88 0 245 0 ---- LA FERTE VIDAME PROFILEUR
 07117 4883 -347 58 55 0 ---- PLOUMANAC'H
 07118 4876 -347 87 88 0 ---- LANNION
 07119 4823 -330 0 262 0 ---- ROSTRENEN
-07120 4853 -285 135 130 0 ---- TREMUSON-ST-BRIEUC
+07120 4853 -285 135 138 0 ---- TREMUSON-ST-BRIEUC
 07125 4859 -208 59 67 0 ---- DINARD
 07129 4893 -15 0 155 0 ---- FALAISE-RADAR
-07130 4807 -173 43 38 0 ---- RENNES-SAINT JACQUES
+07130 4807 -173 37 38 0 ---- RENNES-SAINT JACQUES
 07134 4803 -75 100 101 0 ---- LAVAL-ETRONNIER
 07139 4845 11 145 145 0 ---- ALENCON
 07140 4806 138 127 132 0 ---- CHATEAUDUN
@@ -1692,7 +1698,7 @@
 07270 4707 393 0 598 0 ---- CHATEAU-CHINON
 07274 4736 478 0 592 0 ---- BLAISY HAUT RADAR
 07276 4785 458 0 263 0 ---- CHATILLON/SEINE
-07280 4727 509 227 221 0 ---- DIJON-LONGVIC
+07280 4727 509 227 222 0 ---- DIJON-LONGVIC
 07283 4784 534 467 466 0 ---- LANGRES
 07288 4725 599 310 307 0 ---- BESANCON
 07291 4737 702 0 913 0 ---- MONTANCY-RADAR
@@ -1701,18 +1707,18 @@
 07296 4759 684 402 401 0 ---- DORANS
 07299 4761 751 273 270 0 ---- BALE-MULHOUSE
 07300 4669 -233 32 32 0 ---- L ILE D YEU
-07306 4670 -138 91 91 0 ---- LA ROCHE-SUR-YON
+07306 4671 -138 91 91 0 ---- LA ROCHE-SUR-YON
 07314 4605 -141 23 11 0 ---- POINTE DE CHASSIRON
 07315 4615 -114 10 4 0 ---- LA ROCHELLE
 07316 4618 -119 18 23 0 ---- LA ROCHELLE AEROPORT ILE DE RE
 07330 4632 -40 61 61 0 ---- NIORT
-07335 4659 31 120 128 0 ---- POITIERS-BIARD
+07335 4659 31 120 129 0 ---- POITIERS-BIARD
 07336 4670 7 0 159 0 ---- CHERVES RADAR
 07354 4687 174 157 161 0 ---- CHATEAUROUX DEOLS
 07360 4615 187 553 546 0 ---- GUERET-GRANCHER
 07361 4618 195 366 365 0 ---- GUERET ST LAURENT
 07374 4617 340 251 249 0 ---- VICHY-CHARMEIL
-07379 4641 401 244 243 0 ---- SAINT-YAN
+07379 4641 401 242 243 0 ---- SAINT-YAN
 07381 4607 445 0 908 0 ---- SAINT NIZIER-RADAR
 07385 4630 480 217 222 0 ---- MACON
 07386 4704 543 195 197 0 ---- DOLE-TAVAUX
@@ -1724,6 +1730,7 @@
 07438 4515 147 117 112 0 ---- BRIVE
 07460 4579 315 326 333 0 ---- CLERMONT-FERRAND
 07461 4529 371 0 1115 0 ---- SEMBADEL-RADAR
+07468 4515 564 0 1895 0 ---- MOUCHEROTTE RADAR
 07469 4593 688 1037 1042 2 ---- CHAMONIX
 07471 4507 376 833 832 2 ---- LE PUY-LOUDES
 07475 4553 429 402 404 0 ---- ST-ETIENNE BOUTHEON
@@ -1740,7 +1747,7 @@
 07500 4463 -125 28 9 0 ---- LEGE-CAP FERRET
 07502 4453 -112 24 23 0 ---- CAZAUX
 07503 4443 -125 39 35 0 ---- BISCAROSSE
-07510 4483 -69 54 51 0 T-T- BORDEAUX MERIGNAC
+07510 4483 -69 48 51 0 T-T- BORDEAUX MERIGNAC
 07524 4417 59 69 62 0 ---- AGEN
 07530 4482 52 52 52 0 ---- BERGERAC
 07535 4474 140 261 260 0 ---- GOURDON
@@ -1754,7 +1761,9 @@
 07563 4391 490 48 38 0 ---- AVIGNON
 07569 4432 476 0 309 0 ---- BOLLENE-RADAR
 07570 4454 437 280 281 0 ---- LANAS SYN
+07572 4401 653 0 1772 0 ---- MONT-MAUREL RADAR
 07577 4458 473 74 73 0 ---- MONTELIMAR
+07578 4450 622 0 1736 0 ---- MONT-COLOMBIS RADAR
 07579 4414 486 55 60 0 ---- ORANGE
 07586 4408 505 106 99 0 ---- CARPENTRAS
 07587 4468 572 0 1069 0 ---- LUS-LA-CROIX-HAUTE
@@ -1766,6 +1775,7 @@
 07606 4362 -61 0 126 0 ---- MOMUY RADAR
 07607 4391 -50 59 62 0 ---- MONT-DE-MARSAN
 07610 4338 -42 183 188 0 ---- PAU-UZEIN
+07618 4358 137 158 158 0 -TT- TOULOUSE RW
 07621 4319 0 364 384 0 ---- TARBES-OSSUN
 07622 4369 60 128 125 0 ---- AUCH
 07627 4301 111 415 419 0 ---- SAINT GIRONS
@@ -1774,13 +1784,13 @@
 07630 4362 138 150 152 0 ---- TOULOUSE BLAGNAC
 07631 4353 137 166 164 0 ---- TOULOUSE FRANCAZAL
 07632 4391 212 171 172 0 ---- ALBI
-07635 4322 229 130 132 0 ---- CARCASSONNE
+07635 4322 229 127 132 0 ---- CARCASSONNE
 07637 4399 261 0 667 0 ---- MONTCLAR RADAR
 07638 4332 335 16 17 0 ---- BEZIERS-VIAS
-07641 4340 369 77 80 0 ---- SETE
+07641 4340 369 81 80 0 ---- SETE
 07643 4358 396 8 5 0 ---- MONTPELLIER
 07645 4386 441 62 60 0 T-T- NIMES-COURBESSAC
-07646 4376 441 105 94 0 ---- NIMES GARONS
+07646 4376 442 105 94 0 ---- NIMES GARONS
 07647 4352 492 24 25 0 ---- ISTRES
 07648 4360 509 59 60 0 ---- SALON DE PROVENCE
 07650 4344 522 32 21 0 ---- MARIGNANE
@@ -1794,8 +1804,9 @@
 07675 4338 639 82 81 0 ---- LE LUC
 07680 4342 675 6 2 0 ---- SAINT-RAPHAEL
 07684 4356 695 4 4 0 ---- CANNES
-07690 4365 721 28 4 0 ---- NICE
+07690 4365 721 26 4 0 ---- NICE
 07695 4368 733 144 138 0 ---- CAP FERRAT
+07714 4459 665 0 2575 0 ---- VARS-MAYT RADAR
 07745 4292 286 0 702 0 ---- OPOUL-RADAR
 07747 4274 287 44 44 0 ---- PERPIGNAN
 07749 4252 314 87 82 0 ---- CAP BEAR
@@ -1807,7 +1818,7 @@
 07774 4213 950 0 50 0 ---- ALERIA RADAR
 07775 4226 953 74 65 0 ---- ALISTRO
 07780 4151 910 23 27 0 ---- FIGARI
-07785 4300 936 113 104 0 ---- CAP CORSE
+07785 4300 936 113 72 0 ---- CAP CORSE
 07790 4254 949 12 8 0 ---- BASTIA
 08001 4337 -842 67 58 0 T-T- LA CORUNA
 08002 4331 -836 103 98 0 ---- LA CORUNA/ALVEDRO
@@ -1998,7 +2009,7 @@
 10006 5468 675 5 5 0 ---- NORDSEEBOJE III
 10007 5418 743 0 0 0 ---- UFS DEUTSCHE BUCHT
 10008 5500 633 3 3 0 ---- NORDSEEBOJE II
-10015 5418 789 8 4 0 ---- HELGOLAND
+10015 5418 789 3 4 0 ---- HELGOLAND
 10018 5492 835 19 16 0 ---- WESTERLAND/SYLT
 10020 5501 841 26 26 0 ---- LIST/SYLT
 10022 5479 894 8 7 0 ---- LECK
@@ -2015,7 +2026,7 @@
 10044 5450 1027 26 5 0 ---- LEUCHTTURM KIEL
 10046 5438 1014 28 0 0 ---- KIEL-HOLTENAU
 10055 5453 1106 9 3 0 ---- FEHMARN
-10067 5449 1124 11 5 0 ---- MARIENLEUCHTE
+10067 5449 1124 12 5 0 ---- MARIENLEUCHTE
 10089 5417 1211 0 2 0 ---- ROSTOCK (RADAR)
 10091 5468 1344 42 42 0 ---- ARKONA
 10093 5436 1348 41 40 0 ---- PUTBUS
@@ -2040,7 +2051,7 @@
 10149 5353 983 13 5 0 ---- HAMBURG-FINKENWERDER
 10150 5417 1035 28 26 0 ---- DOERNICK
 10152 5409 1088 2 1 0 ---- PELZERHAKEN
-10156 5380 1070 16 17 0 ---- LUEBECK-BLANKENSEE
+10156 5380 1070 17 16 0 ---- LUEBECK-BLANKENSEE
 10157 5380 1072 21 18 0 ---- LUEBECK-BLANKENSEE
 10161 5400 1119 16 15 0 ---- BOLTENHAGEN
 10162 5364 1139 60 59 0 ---- SCHWERIN
@@ -2061,8 +2072,8 @@
 10222 5315 861 30 6 0 ---- LEMWERDER
 10224 5305 880 5 4 0 ---- BREMEN
 10235 5296 978 77 76 0 ---- SOLTAU
-10238 5282 993 78 70 0 TTTP BERGEN
-10246 5292 1018 88 73 0 ---- FASSBERG
+10238 5282 992 78 70 0 TTTT BERGEN
+10246 5292 1019 88 73 0 ---- FASSBERG
 10249 5339 1069 46 45 0 ---- BOIZENBURG
 10253 5297 1114 18 17 0 ---- LUECHOW
 10261 5289 1173 23 21 0 ---- SEEHAUSEN
@@ -2076,7 +2087,7 @@
 10282 5332 1342 116 115 0 ---- FELDBERG/MECKLENBURG
 10289 5332 1393 57 56 0 ---- GRUENOW
 10291 5303 1399 55 54 0 ---- ANGERMUENDE
-10304 5273 733 41 0 0 -TT- MEPPEN
+10304 5272 732 41 19 0 -TT- MEPPEN
 10305 5252 731 23 22 0 ---- LINGEN
 10306 5229 739 49 40 0 ---- RHEINE-BENTLAGE
 10309 5208 694 47 46 0 ---- AHAUS
@@ -2189,7 +2200,7 @@
 10552 5065 1077 939 937 2 ---- SCHMUECKE
 10554 5098 1096 322 316 0 ---- ERFURT-WEIMAR
 10555 5098 1132 268 264 0 ---- WEIMAR
-10557 5050 1114 851 845 2 ---- NEUHAUS A.R.
+10557 5050 1113 851 845 2 ---- NEUHAUS A.R.
 10558 5038 1118 630 626 0 ---- SONNEBERG-NEUFANG
 10564 5057 1180 502 501 0 ---- SCHLEIZ
 10565 5109 1193 246 246 0 ---- OSTERFELD
@@ -2211,7 +2222,7 @@
 10615 4976 705 482 481 0 ---- DEUSELBACH
 10616 4995 726 503 497 0 ---- HAHN
 10617 4997 712 0 257 0 ---- TRABEN-TRARBACH
-10618 4970 733 377 376 0 TTTP IDAR-OBERSTEIN
+10618 4969 733 377 376 0 TTTT IDAR-OBERSTEIN
 10628 4998 795 111 110 0 ---- GEISENHEIM
 10629 4999 871 0 198 0 ---- OFFENTHAL (RADAR)
 10630 5002 855 144 0 0 ---- FRANKFURT-WALLDORF (RADAR)
@@ -2228,7 +2239,7 @@
 10648 4972 910 455 453 0 ---- MICHELSTADT-VIELBRUNN
 10653 4965 997 298 298 0 ---- GIEBELSTADT
 10655 4977 996 272 268 0 ---- WUERZBURG
-10658 5022 1008 282 282 0 ---- BAD KISSINGEN
+10658 5022 1008 281 282 0 ---- BAD KISSINGEN
 10671 5031 1097 345 345 0 ---- LAUTERTAL-OBERLAUTER
 10675 4988 1092 241 240 0 ---- BAMBERG
 10677 4998 1163 498 488 0 ---- BAYREUTH
@@ -2255,7 +2266,7 @@
 10739 4883 919 318 314 0 ---- STUTTGART/SCHNARRENBERG
 10739 4883 919 315 314 0 T-T- STUTTGART/SCHNARRENBERG
 10742 4921 952 274 276 0 ---- OEHRINGEN
-10743 4940 997 473 473 0 ---- NIEDERSTETTEN
+10743 4939 997 473 473 0 ---- NIEDERSTETTEN
 10747 4892 969 490 489 0 ---- KAISERSBACH-CRONHUETTE
 10752 4947 1038 347 325 0 ---- ILLESHEIM
 10755 4932 1063 476 467 0 ---- ANSBACH/KATTERBACH
@@ -2263,7 +2274,7 @@
 10761 4901 1093 441 439 0 ---- WEISSENBURG-EMETZHEIM
 10763 4950 1106 318 314 0 ---- NUERNBERG
 10765 4922 1110 394 385 0 ---- ROTH
-10771 4943 1190 418 417 0 ---- KUEMMERSBRUCK
+10771 4943 1190 418 417 0 TTTT KUEMMERSBRUCK
 10771 4943 1190 0 417 0 TTTT KUEMMERSBRUCK
 10775 4922 1183 442 442 0 ---- HOHENFELS
 10776 4904 1210 370 365 0 ---- REGENSBURG
@@ -2287,14 +2298,14 @@
 10850 4879 1071 503 502 0 ---- HARBURG
 10852 4843 1094 477 461 0 ---- AUGSBURG
 10853 4871 1121 387 380 0 ---- NEUBURG/DONAU (FLUGPLATZ)
-10856 4819 1085 562 550 0 ---- LECHFELD
+10856 4818 1085 562 550 0 ---- LECHFELD
 10857 4808 1091 628 621 0 ---- LANDSBERG (FLUGPLATZ)
 10859 4808 1128 600 593 0 ---- OBERPFAFFENHOFEN
-10860 4872 1153 366 364 0 ---- INGOLSTADT (FLUGPLATZ)
+10860 4871 1154 366 364 0 ---- INGOLSTADT (FLUGPLATZ)
 10863 4840 1170 479 477 0 ---- WEIHENSTEPHAN-DURNAST
 10865 4816 1154 526 515 0 ---- MUENCHEN-STADT
 10868 4824 1155 489 484 0 T-T- MUENCHEN-OBERSCHLEISSHEIM
-10869 4832 1195 468 460 0 ---- ERDING
+10869 4832 1194 468 460 0 ---- ERDING
 10870 4835 1181 447 446 0 ---- MUENCHEN-FLUGHAFEN
 10871 4834 1161 0 489 0 ---- FUERHOLZEN (RADAR)
 10872 4866 1254 351 350 0 ---- GOTTFRIEDING
@@ -2311,7 +2322,7 @@
 10946 4772 1033 702 705 0 ---- KEMPTEN
 10948 4740 1028 807 806 2 ---- OBERSTDORF
 10950 4804 1022 0 667 0 ---- MEMMINGEN (RADAR)
-10954 4784 1087 757 756 0 -PP- ALTENSTADT
+10954 4783 1087 757 756 0 -TTT ALTENSTADT
 10961 4742 1099 2960 2964 3 ---- ZUGSPITZE
 10962 4780 1101 986 977 2 -T-- HOHENPEISSENBERG
 10963 4748 1106 720 719 0 ---- GARMISCH-PARTENKIRCHEN
@@ -2745,7 +2756,7 @@
 13383 4357 2135 167 166 0 ---- KRUSEVAC
 13384 4393 2138 125 123 0 ---- CUPRIJA
 13386 4339 2144 0 1482 0 ---- JASTREBAC
-13388 4333 2190 202 202 0 ---- NIS
+13388 4333 2190 203 203 0 T-T- NIS
 13389 4298 2195 232 230 0 ---- LESKOVAC
 13397 4302 2275 450 448 0 ---- DIMITROVGRAD
 13455 4245 1855 10 10 0 ---- HERCEG NOVI-IGALO
@@ -3092,6 +3103,7 @@
 16044 4603 1318 94 93 0 TTTT UDINE/CAMPOFORMIDO
 16044 4604 1319 94 93 0 TTTT CAMPOFORMIDO RDS
 16045 4598 1305 53 51 0 ---- UDINE/RIVOLTO
+16045 4598 1306 51 50 0 TTTT UDINE/RIVOLTO RDS
 16046 4598 1305 54 52 0 ---- UDINE/RIVOLTO
 16052 4594 771 3488 3480 3 ---- PIAN ROSA
 16054 4573 735 552 550 0 ---- AOSTA POLLEIN
@@ -3407,6 +3419,7 @@
 17098 4054 4308 1795 1794 2 ---- KARS
 17099 3972 4305 1632 1632 2 ---- AGRI
 17100 3992 4405 858 858 0 ---- IGDIR
+17109 4020 2588 19 0 0 ---- GOKCEADA
 17110 4018 2590 72 42 0 ---- GOKCEADA
 17111 3983 2607 30 30 0 ---- BOZCAADA
 17112 4013 2640 6 6 0 ---- CANAKKALE
@@ -3443,6 +3456,7 @@
 17193 3861 3470 1260 1260 2 ---- NEVSEHIR
 17194 3877 3453 945 947 0 ---- KAPODOKYA
 17195 3882 3543 1054 1055 2 ---- KAYSERI/ERKILET
+17196 3868 3547 1096 1096 0 T-T- KAYSERI BOLGE
 17197 3835 3825 931 920 0 ---- TULGA MEYDAN
 17199 3835 3832 948 948 0 ---- MALATYA/BOLGE
 17200 3843 3808 849 862 0 ---- MALATYA/ERHAC
@@ -3506,7 +3520,7 @@
 17609 3486 3361 10 10 0 ---- LARNACA AIRPORT
 20046 8063 5806 25 21 0 T--- POLARGMO IM. E.T. KRENKELJA
 20069 7948 7698 10 10 0 ---- OSTROV VIZE
-20087 7955 9057 8 7 0 ---- OSTROV GOLOMJANNYJ
+20087 7955 9057 8 7 0 ---- MGMS IM. G.F. USHAKOVA
 20094 7928 10162 26 24 0 T--- MYS BARANOVA
 20107 7806 1422 76 73 0 ---- BARENTSBURG
 20274 7750 8220 23 0 0 ---- OSTROV UEDINENIJA
@@ -4205,7 +4219,7 @@
 28409 5643 5220 169 170 0 ---- MOZGA
 28411 5683 5345 156 155 0 ---- IZHEVSK
 28418 5647 5373 133 135 0 ---- SARAPUL
-28419 5628 5497 102 98 0 ---- JANAUL
+28419 5628 5497 99 98 0 ---- JANAUL
 28428 5650 5613 148 148 0 ---- CHERNUSKA
 28434 5665 5778 206 205 0 ---- KRASNOUFIMSK
 28440 5683 6063 281 280 0 ---- EKATERINBURG
@@ -4956,7 +4970,7 @@
 35188 5113 7137 350 0 0 ---- ASTANA
 35217 5025 5257 32 0 0 ---- DZHAMBEJTY
 35229 5028 5715 219 0 0 T--- AKTOBE
-35235 5072 5867 243 0 0 ---- STEPNOE
+35235 5072 5867 276 0 0 ---- STEPNOE
 35302 5020 5117 17 0 0 ---- CHAPAEVO
 35334 4980 5798 368 0 0 ---- TOKMANSAY
 35357 4968 6952 349 0 0 ---- BARSHINO
@@ -4966,18 +4980,18 @@
 35406 4905 5187 2 0 0 ---- TAIPAK
 35416 4907 5468 95 0 0 ---- UIL
 35426 4915 5712 234 0 0 ---- TEMIR
-35475 4901 6866 490 0 0 ---- SHUBARKUL
+35475 4900 6865 490 0 0 ---- SHUBARKUL
 35497 4885 7287 656 0 0 ---- ZHARYK
 35532 4863 5850 398 0 0 ---- MUGODZARSKAJA
 35576 4830 6965 0 0 0 ---- KYZYLZHAR
-35615 4763 5332 -22 0 0 ---- MAKAT
-35662 4783 6673 488 0 0 ---- KARSAKBAY
+35615 4763 5332 -21 0 0 ---- MAKAT
+35662 4783 6672 488 0 0 ---- KARSAKBAY
 35671 4780 6772 346 0 0 T--- ZHEZKAZGAN
 35699 4745 7481 620 0 0 ---- BEKTAUATA
 35700 4712 5192 -22 0 0 T--- ATYRAU
-35701 4722 5098 -27 0 0 ---- ISATAI
+35701 4720 5098 -27 0 0 ---- ISATAI
 35746 4678 6165 62 0 0 ---- ARAL TENIZI
-35793 4722 7336 582 0 0 ---- MOIYNTY
+35793 4722 7334 585 0 0 ---- MOIYNTY
 35796 4680 7508 350 0 0 ---- BALHASH
 35849 4577 6212 68 0 0 ---- KAZALY
 35925 4540 5612 88 0 0 ---- SAM
@@ -5012,21 +5026,21 @@
 36278 5038 9043 1850 1850 0 ---- MUGUR-AKSY
 36307 5026 9517 1101 1100 2 ---- ERZIN
 36325 5060 9752 1315 1314 2 ---- KUNGUR-TUK
-36341 4978 7638 776 0 0 ---- EGINDYBULAK
+36341 4978 7637 776 0 0 ---- EGINDYBULAK
 36397 4922 8122 455 0 0 ---- ZHALGYZTOBE
 36428 4920 8452 401 0 0 ---- ULKEN NARYN
 36535 4875 8237 512 0 0 ---- KOKPEKTY
 36639 4712 8162 491 0 0 ---- URZHAR
 36686 4655 7687 349 0 0 ---- ALGAZY OSTROV
-36785 4539 7950 628 0 0 ---- ZHANSUGUROV
+36785 4538 7948 628 0 0 ---- ZHANSUGUROV
 36821 4483 7627 396 0 0 ---- BAKANAS
-36856 4427 7931 1224 0 0 ---- KONYROLEN
+36856 4427 7930 1224 0 0 ---- KONYROLEN
 36859 4417 8006 645 0 0 ---- ZHARKENT
 36864 4353 7525 743 0 0 ---- OTAR
 36870 4323 7693 851 0 0 ---- ALMATY
-36871 4319 7675 810 0 0 ---- KARASAYSKY
+36871 4318 7675 810 0 0 ---- KARASAYSKY
 36872 4336 7700 663 0 0 T-T- ALMATY
-36883 4348 7698 614 0 0 ---- ILIYSKY
+36883 4348 7698 613 0 0 ---- ILIYSKY
 36911 4283 7528 817 816 0 ---- TOKMAK
 36944 4235 7834 1769 1768 0 ---- KYZYL-SUU
 36974 4143 7600 2041 2039 0 ---- NARYN
@@ -5258,8 +5272,8 @@
 38262 4295 5980 93 95 0 ---- CHIMBAJ
 38264 4248 5962 75 77 0 ---- NUKUS
 38267 4230 5913 71 0 0 ---- KENEURGENCH
-38313 4272 6900 406 0 0 ---- BUGUN
-38318 4210 6812 184 0 0 ---- BAYYRKUM
+38313 4372 6900 405 0 0 ---- BUGUN
+38318 4210 6812 183 0 0 ---- BAYYRKUM
 38328 4232 6970 604 0 0 ---- SHYMKENT
 38334 4248 7030 808 0 0 ---- AUL TURARA RYSKULOVA
 38339 4217 7088 2162 2150 2 ---- OLGAING
@@ -6568,6 +6582,7 @@
 44474 2735 8767 1732 1732 2 ---- TAPLEJUNG
 44477 2698 8735 1210 1210 2 ---- DHANKUTA
 44478 2648 8727 72 72 0 ---- BIRATNAGAR AIRPORT
+44517 2786 9066 3708 0 255 ---- TSAMPA
 45004 2231 11417 66 65 0 T-T- KOWLOON
 45004 2233 11417 0 24 0 -P-P KOWLOON
 45005 2230 11417 40 32 0 ---- HONG KONG OBSERVATORY
@@ -6629,7 +6644,7 @@
 47086 3622 12653 0 4 0 P--- UNGCHEON
 47087 3657 12728 0 33 0 ---- JOCHIWON
 47088 3640 12828 0 90 0 P--- SANGJU RANGE
-47090 3825 12856 19 19 0 T-T- SOKCHO
+47090 3825 12856 19 19 0 ---- SOKCHO
 47091 3813 12860 13 11 0 ---- SOKCHO AIRPORT
 47092 3804 12866 74 73 0 ---- YANGYANG INT'L AIRPORT
 47094 3811 12743 0 1064 0 ---- GWANGDEOKSAN
@@ -6641,7 +6656,7 @@
 47101 3790 12774 79 78 0 ---- CHUNCHEON
 47102 3797 12463 146 145 0 T-T- BAENGNYEONGDO
 47103 3793 12463 0 169 0 ---- BAENGNYEONGDO AB
-47104 3779 12886 80 79 0 ---- BUKGANGNEUNG
+47104 3779 12886 80 79 0 T-T- BUKGANGNEUNG
 47105 3775 12888 27 27 0 ---- GANGNEUNG
 47106 3751 12912 41 41 0 ---- DONGHAE
 47107 3772 12893 0 6 0 ---- GANGNEUNG AB
@@ -6692,7 +6707,7 @@
 47152 3556 12932 36 35 0 ---- ULSAN
 47153 3517 12893 0 3 0 ---- GIMHAE AB
 47154 3613 12832 50 49 0 ---- GUMI
-47155 3517 12857 38 38 0 ---- CHANGWON
+47155 3517 12857 38 38 0 TTTT CHANGWON
 47156 3517 12689 74 73 0 ---- GWANGJU
 47157 3567 12791 227 226 0 ---- GEOCHANG
 47158 3511 12680 13 13 0 TTTT GWANGJU AB
@@ -6726,22 +6741,22 @@
 47402 4494 14258 8 7 0 ---- KITAMIESASHI
 47404 4436 14169 10 8 0 ---- HABORO
 47405 4458 14296 16 14 0 ---- OMU
-47406 4395 14163 24 24 0 ---- RUMOI
+47406 4395 14163 24 24 0 PPPP RUMOI
 47407 4376 14237 140 120 0 ---- ASAHIKAWA
 47409 4402 14428 44 38 0 ---- ABASHIRI
 47411 4318 14102 26 25 0 ---- OTARU
 47412 4306 14133 26 17 0 T-T- SAPPORO
 47413 4321 14179 52 42 0 ---- IWAMIZAWA
 47415 4314 14101 0 700 0 ---- SAPPORO/KENASHIYAMA
-47417 4292 14321 44 38 0 ---- OBIHIRO
+47417 4292 14321 44 38 0 PPPP OBIHIRO
 47418 4299 14438 40 5 0 ---- KUSHIRO
-47418 4295 14444 16 14 0 T-T- KUSHIRO
+47418 4295 14444 15 14 0 T-T- KUSHIRO
 47419 4296 14452 0 98 0 ---- KUSHIRO/KOMBUMORI
 47420 4333 14559 27 25 0 ---- NEMURO
 47421 4280 14022 35 33 0 ---- SUTTSU
 47422 4180 14007 0 32 0 ---- KAMINOKUNI
 47423 4231 14097 50 40 0 ---- MURORAN
-47423 4232 14097 0 3 0 ---- MURORAN
+47423 4232 14097 0 3 0 PPPP MURORAN
 47424 4262 14155 8 6 0 ---- TOMAKOMAI
 47425 4279 14166 30 27 0 ---- CHITOSE AB
 47426 4216 14278 38 37 0 ---- URAKAWA
@@ -6776,7 +6791,7 @@
 47557 3722 14043 375 372 0 ---- FUKUSHIMA AIRPORT
 47567 3824 14091 10 7 0 ---- KASUMINOME AB
 47569 3814 14091 5 2 0 ---- SENDAI AIRPORT
-47570 3749 13991 214 212 0 ---- WAKAMATSU
+47570 3749 13991 214 212 0 PPPP WAKAMATSU
 47572 3772 13882 0 633 0 ---- NIIGATA/YAHIKOYAMA
 47573 3796 13911 4 1 0 ---- NIIGATA AIRPORT
 47574 4065 13993 68 66 0 ---- FUKAURA
@@ -6788,10 +6803,10 @@
 47582 3972 14010 22 6 0 T-T- AKITA
 47583 4019 14037 87 84 0 ---- ODATE-NOSHIRO AIRPORT
 47584 3970 14116 155 155 0 ---- MORIOKA
-47585 3965 14197 47 42 0 ---- MIYAKO
-47587 3890 13984 5 3 0 ---- SAKATA
+47585 3965 14197 47 42 0 PPPP MIYAKO
+47587 3890 13984 5 3 0 PPPP SAKATA
 47588 3826 14035 154 153 0 ---- YAMAGATA
-47590 3826 14090 44 39 0 ---- SENDAI
+47590 3826 14090 44 39 0 PPPP SENDAI
 47590 3826 14090 0 38 0 ---- SENDAI
 47591 3840 14121 5 2 0 ---- MATSUSHIMA AB
 47592 3843 14130 43 43 0 ---- ISHINOMAKI
@@ -6807,28 +6822,28 @@
 47607 3671 13719 17 9 0 ---- TOYAMA
 47610 3665 13819 420 418 0 ---- NAGANO
 47611 3610 13819 0 1925 0 ---- NAGANO/KURUMAYAMA
-47612 3711 13825 19 13 0 ---- TAKADA
+47612 3711 13825 15 13 0 PPPP TAKADA
 47615 3654 13987 140 119 0 ---- UTSUNOMIYA
-47616 3606 13622 17 9 0 ---- FUKUI
+47616 3606 13622 17 9 0 PPPP FUKUI
 47617 3615 13725 562 560 0 ---- TAKAYAMA
 47618 3625 13797 612 610 0 ---- MATSUMOTO
 47620 3604 13811 763 760 0 ---- SUWA
 47622 3634 13855 1005 999 2 ---- KARUIZAWA
 47624 3640 13906 114 112 0 ---- MAEBASHI
 47625 3629 13908 92 0 1 ---- TAKASAKI
-47626 3615 13938 32 30 0 ---- KUMAGAYA
+47626 3615 13938 32 30 0 PPPP KUMAGAYA
 47628 3622 14019 0 36 0 ---- KAKIOKA
-47629 3638 14047 31 29 0 ---- MITO
+47629 3638 14047 31 29 0 PPPP MITO
 47631 3565 13606 12 2 0 ---- TSURUGA
 47632 3540 13676 17 13 0 ---- GIFU
 47634 3539 13687 42 39 0 ---- GIFU AB
 47635 3525 13691 17 14 0 ---- NAGOYA AIRPORT
-47636 3517 13697 56 51 0 ---- NAGOYA
+47636 3517 13697 56 51 0 PPPP NAGOYA
 47636 3517 13696 0 51 0 ---- NAGOYA
 47637 3552 13782 529 516 0 ---- IIDA
 47638 3567 13855 282 273 0 ---- KOFU
 47639 3536 13872 3778 3775 1 ---- FUJISAN
-47640 3550 13876 861 860 2 ---- KAWAGUCHIKO
+47640 3550 13876 861 860 2 PPPP KAWAGUCHIKO
 47641 3599 13907 234 232 0 ---- CHICHIBU
 47642 3575 13935 144 141 0 ---- YOKOTA
 47643 3584 13941 93 90 0 ---- IRUMA AB
@@ -6841,23 +6856,23 @@
 47653 3463 13709 8 6 0 ---- IRAKO
 47654 3475 13771 48 46 0 ---- HAMAMATSU
 47655 3460 13821 47 45 0 ---- OMAEZAKI
-47656 3497 13840 16 14 0 ---- SHIZUOKA
+47656 3497 13840 16 14 0 PPPP SHIZUOKA
 47657 3511 13893 22 21 0 ---- MISHIMA
 47658 3481 13830 10 7 0 ---- SHIZUHAMA AB
 47659 3474 13813 0 156 0 ---- SHIZUOKA/MAKINOHARA
 47660 3571 13940 98 95 0 ---- TACHIKAWA AB
 47661 3540 13991 6 3 0 ---- KISARAZU AB
 47662 3569 13975 24 25 0 ---- TOKYO
-47663 3407 13619 17 15 0 ---- OWASE
+47663 3407 13619 17 15 0 PPPP OWASE
 47666 3460 13884 53 52 0 ---- IROZAKI
 47668 3504 13909 68 67 0 ---- AJIRO
 47670 3544 13965 43 39 0 ---- YOKOHAMA
 47671 3554 13978 9 6 0 ---- TOKYO INTERNATIONAL AIRPORT
 47672 3499 13987 7 6 0 ---- TATEYAMA
-47674 3515 14031 14 12 0 ---- KATSUURA
+47674 3515 14031 14 12 0 PPPP KATSUURA
 47675 3475 13936 76 74 0 ---- OSHIMA
-47677 3411 13952 38 36 0 ---- MIYAKEJIMA
-47678 3311 13978 153 151 0 T-T- HACHIJOJIMA
+47677 3411 13952 40 38 0 ---- MIYAKEJIMA
+47678 3311 13978 153 151 0 PPPP HACHIJOJIMA
 47678 3311 13978 153 152 0 TPTP HACHIJOJIMA/OMURE
 47679 3545 13944 65 62 0 ---- ATSUGI NAS
 47680 3551 13938 115 112 0 ---- ZAMA/KASTNER
@@ -6894,12 +6909,12 @@
 47743 3549 13324 7 4 0 ---- MIHO AB
 47744 3543 13334 8 7 0 ---- YONAGO
 47746 3549 13424 16 7 0 ---- TOTTORI
-47746 3553 13419 0 6 0 ---- TOTTORI
+47746 3553 13419 0 6 0 PPPP TOTTORI
 47747 3554 13482 6 3 0 ---- TOYOOKA
 47749 3549 13538 9 6 0 -P-- MAIZURU AB
-47750 3545 13532 23 2 0 ---- MAIZURU
+47750 3545 13532 4 2 0 ---- MAIZURU
 47754 3440 13141 4 2 0 ---- HAGI
-47755 3490 13207 21 19 0 ---- HAMADA
+47755 3490 13207 21 19 0 PPPP HAMADA
 47756 3506 13401 148 146 0 ---- TSUYAMA
 47759 3501 13572 53 41 0 ---- KYOTO
 47761 3528 13624 93 87 0 ---- HIKONE
@@ -6907,8 +6922,8 @@
 47764 3415 13225 6 3 0 ---- IWAKUNI
 47765 3440 13246 54 4 0 ---- HIROSHIMA
 47766 3424 13255 5 4 0 ---- KURE
-47767 3445 13325 3 2 0 ---- FUKUYAMA
-47768 3465 13391 19 3 0 ---- OKAYAMA
+47767 3445 13325 4 2 0 ---- FUKUYAMA
+47768 3469 13393 7 5 0 ---- OKAYAMA
 47769 3484 13466 40 38 0 ---- HIMEJI
 47770 3470 13521 31 5 0 ---- KOBE
 47771 3478 13544 15 12 0 ---- OSAKA INTERNATIONAL AIRPORT
@@ -6918,7 +6933,7 @@
 47776 3434 13490 112 109 0 ---- SUMOTO
 47777 3422 13516 18 14 0 ---- WAKAYAMA
 47778 3345 13576 69 68 0 ---- SHIONOMISAKI
-47778 3345 13576 76 68 0 T-T- SHIONOMISAKI
+47778 3345 13576 69 68 0 T-T- SHIONOMISAKI
 47779 3460 13560 13 10 0 ---- YAO AIRPORT
 47780 3469 13583 109 104 0 ---- NARA
 47782 3365 13536 92 89 0 ---- NANKISHIRAHAMA AIRPORT
@@ -6933,13 +6948,13 @@
 47792 3427 13259 0 726 0 ---- HIROSHIMA/HAIGAMINE
 47793 3476 13386 242 239 0 ---- OKAYAMA AIRPORT
 47794 3553 13416 18 15 0 ---- TOTTORI AIRPORT
-47795 3390 13513 0 9 0 ---- WAKAYAMA/MIHAMA
-47796 3463 13522 10 7 0 ---- KOBE AIRPORT
+47795 3389 13512 0 9 0 PPPP WAKAYAMA/MIHAMA
+47796 3463 13522 8 5 0 ---- KOBE AIRPORT
 47799 3428 12933 66 63 0 ---- TSUSHIMA AIRPORT
 47800 3420 12929 4 4 0 ---- IZUHARA
-47800 3415 12922 0 130 0 ---- IZUHARA
+47800 3415 12922 0 130 0 PPPP IZUHARA
 47803 3388 13065 33 30 0 ---- ASHIYA AB
-47805 3336 12955 59 58 0 ---- HIRADO
+47805 3336 12955 59 58 0 PPPP HIRADO
 47806 3343 13036 0 970 0 ---- FUKUOKA/SEFURISAN
 47807 3358 13038 15 3 0 T-T- FUKUOKA
 47808 3358 13044 12 9 0 ---- FUKUOKA AIRPORT
@@ -6949,13 +6964,13 @@
 47812 3315 12972 6 4 0 ---- SASEBO
 47813 3327 13031 33 5 0 ---- SAGA
 47814 3332 13093 84 83 0 ---- HITA
-47815 3324 13162 13 5 0 ---- OITA
+47815 3324 13162 13 5 0 PPPP OITA
 47816 3344 12943 0 85 0 ---- IKITSUKIJIMA
 47817 3272 12987 36 27 0 ---- NAGASAKI
 47818 3274 13026 680 678 0 ---- UNZENDAKE
-47819 3281 13071 39 38 0 ---- KUMAMOTO
+47819 3281 13071 39 38 0 PPPP KUMAMOTO
 47821 3288 13107 1144 1142 2 ---- ASOSAN
-47822 3258 13166 21 19 0 ---- NOBEOKA
+47822 3258 13166 21 19 0 PPPP NOBEOKA
 47823 3203 13019 42 40 0 ---- AKUNE
 47824 3222 13076 148 146 0 ---- HITOYOSHI
 47827 3156 13055 32 4 0 T-T- KAGOSHIMA
@@ -6965,14 +6980,14 @@
 47833 3142 13088 0 107 0 ---- KANOYA
 47835 3158 13141 15 3 0 ---- ABURATSU
 47836 3039 13066 38 37 0 ---- YAKUSHIMA
-47836 3038 13066 0 36 0 ---- YAKUSHIMA
+47836 3038 13066 0 36 0 PPPP YAKUSHIMA
 47837 3072 13097 38 25 0 ---- TANEGASHIMA
 47838 3220 13003 15 3 0 ---- USHIBUKA
 47840 3368 13104 20 17 0 ---- TSUIKI AB
 47842 3198 12835 110 109 0 ---- MESHIMA
 47843 3269 12883 27 25 0 ---- FUKUE
 47844 3267 12883 80 77 0 ---- FUKUE AIRPORT
-47848 3172 13032 0 25 0 ---- KAGOSHIMA/ICHIKI
+47848 3171 13032 0 25 0 PPPP KAGOSHIMA/ICHIKI
 47850 3137 13084 68 65 0 ---- KANOYA AB
 47851 3180 13072 275 272 0 ---- KAGOSHIMA AIRPORT
 47852 3347 13174 8 5 0 ---- OITA AIRPORT
@@ -6994,20 +7009,20 @@
 47884 3401 13463 6 3 0 ---- KOMATSUSHIMA AB
 47887 3384 13278 34 32 0 ---- MATSUYAMA
 47890 3428 13375 5 4 0 ---- TADOTSU
-47891 3432 13405 14 9 0 ---- TAKAMATSU
+47891 3432 13405 14 9 0 PPPP TAKAMATSU
 47892 3322 13255 15 2 0 ---- UWAJIMA
 47893 3357 13355 5 1 0 ---- KOCHI
-47893 3357 13355 0 3 0 ---- KOCHI
+47893 3357 13355 0 3 0 PPPP KOCHI
 47895 3407 13457 6 2 0 ---- TOKUSHIMA
 47897 3292 13269 11 2 0 ---- SUKUMO
-47898 3272 13301 34 31 0 ---- SHIMIZU
+47898 3272 13301 34 31 0 PPPP SHIMIZU
 47899 3325 13418 187 185 0 ---- MUROTOMISAKI
 47899 3325 13418 0 185 0 ---- MUROTOMISAKI
 47907 2783 12888 5 2 0 ---- TOKUNOSHIMA AIRPORT
-47909 2838 12950 8 3 0 ---- NAZE
+47909 2838 12950 8 3 0 PPPP NAZE
 47909 2839 12955 295 294 0 T-T- NAZE/FUNCHATOGE
 47911 2447 12298 19 16 0 ---- YONAGUNI AIRPORT
-47912 2447 12301 36 30 0 ---- YONAGUNIJIMA
+47912 2447 12301 36 30 0 PPPP YONAGUNIJIMA
 47917 2443 12377 11 10 0 ---- IRIOMOTEJIMA
 47918 2434 12416 15 6 0 T-T- ISHIGAKIJIMA
 47919 2440 12424 34 31 0 ---- NEW ISHIGAKI AIRPORT
@@ -7026,7 +7041,7 @@
 47938 2672 12778 76 73 0 ---- IEJIMA (US BASE)
 47940 2659 12797 7 6 0 ---- NAGO
 47942 2743 12871 30 27 0 ---- OKINOERABU
-47945 2583 13122 21 15 0 T-T- MINAMIDAITOJIMA
+47945 2583 13122 21 15 0 TPTP MINAMIDAITOJIMA
 47946 2650 12790 106 0 1 ---- OKINAWA
 47971 2709 14219 8 3 0 T-T- CHICHIJIMA
 47981 2478 14132 120 117 0 T--- IWOTO
@@ -7370,9 +7385,9 @@
 51467 4267 8633 1733 0 0 ---- BALGUNTAY
 51495 4322 9173 732 0 0 ---- SHISANJIANFANG
 51542 4303 8415 2459 0 0 ---- BAYANBULAK
-51573 4293 8920 37 0 0 ---- TURPAN
+51573 4295 8923 39 0 0 ---- TURPAN
 51644 4172 8295 1084 0 0 T-T- KUQA
-51656 4175 8613 933 0 0 ---- KORLA
+51656 4173 8582 903 0 0 ---- KORLA
 51709 3947 7575 1387 0 0 T-T- KASHI
 51711 4093 7845 1986 0 0 ---- AKQI
 51716 3979 7856 1117 0 0 ---- BACHU
@@ -7415,7 +7430,7 @@
 53068 4363 11195 966 0 0 T-T- ERENHOT
 53083 4462 11415 1183 0 0 ---- NARAN BULAG
 53149 4253 11013 1223 0 0 ---- MANDAL
-53192 4402 11495 1127 0 0 ---- ABAG QI
+53192 4402 11500 1148 0 0 ---- ABAG QI
 53231 4145 10638 1510 0 0 ---- HAILS
 53276 4240 11290 1152 0 0 ---- JURH
 53336 4157 10852 1290 0 0 ---- HALIUT
@@ -7583,7 +7598,7 @@
 56966 2360 10198 398 0 0 ---- YUANJIANG
 56969 2150 10158 633 0 0 ---- MENGLA
 56977 2262 10182 1121 0 0 ---- JIANGCHENG
-56985 2338 10338 1302 0 0 T-T- MENGZI
+56985 2344 10333 1314 0 0 T-T- MENGZI
 57006 3458 10575 1143 0 0 ---- TIANSHUI
 57014 3457 10587 1085 0 0 ---- BEIDAO
 57016 3435 10713 610 0 0 ---- BAOJI
@@ -7609,7 +7624,7 @@
 57348 3102 10953 303 0 0 ---- FENGJIE
 57378 3117 11257 66 0 0 ---- ZHONGXIANG
 57399 3113 11495 75 0 0 ---- MACHENG
-57411 3080 10608 310 0 0 ---- NANCHONG
+57411 3075 10613 347 0 0 ---- GAOPING
 57426 3068 10780 455 0 0 ---- LIANGPING
 57447 3028 10947 458 0 0 T-T- ENSHI
 57461 3073 11137 258 0 0 T-T- YICHANG
@@ -7649,7 +7664,7 @@
 57922 2583 10755 1016 0 0 ---- DUSHAN
 57932 2597 10853 287 0 0 ---- RONGJIANG
 57957 2533 11030 166 0 0 T-T- GUILIN
-57972 2580 11303 185 185 0 T-T- CHENZHOU
+57972 2574 11297 369 0 0 T-T- CHENZHOU
 57993 2587 11500 138 0 0 ---- GANZHOU
 57993 2587 11500 134 0 0 T-T- GANZHOU
 58027 3428 11715 42 0 0 T-T- XUZHOU
@@ -8035,7 +8050,7 @@
 61698 1288 -1497 0 8 0 ---- KOLDA
 61699 1257 -1222 0 165 0 ---- KEDOUGOU
 61701 1320 -1663 33 36 0 --P- BANJUL/YUNDUM
-61705 1322 -1620 0 0 0 ---- SIBANOR
+61705 1322 -1620 21 0 0 ---- SIBANOR
 61707 1348 -1557 11 11 0 ---- JENOI
 61711 1345 -1645 2 1 0 ---- BANJUL/HALF-DIE
 61712 1348 -1618 15 15 0 ---- KEREWAN
@@ -8044,7 +8059,7 @@
 61721 1353 -1477 1 1 0 ---- GEORGETOWN
 61722 1357 -1593 2 2 0 ---- SAPU
 61731 1332 -1422 4 4 0 --P- BASSE
-61733 1388 -1340 0 0 0 ---- FATOTO
+61733 1367 -1447 18 0 0 ---- FATOTO
 61766 1188 -1565 36 39 0 ---- BISSAU AEROPORTO
 61769 1158 -1548 20 18 0 ---- BOLAMA
 61770 1222 -1567 10 0 0 ---- BISSORA
@@ -8085,8 +8100,8 @@
 61972 -2234 4034 6 6 0 ---- ILE EUROPA
 61974 -1038 5660 4 3 4 ---- AGALEGA
 61976 -1589 5452 13 7 0 ---- SERGE-FROLOW (ILE TROMELIN)
-61978 -2119 5557 0 1712 0 ---- PITON VILLERS
-61979 -2091 5542 0 742 0 ---- LE COLORADO
+61978 -2119 5557 0 1712 0 ---- PITON VILLERS RADAR
+61979 -2091 5542 0 742 0 ---- LE COLORADO RADAR
 61980 -2089 5553 13 20 0 --T- SAINT-DENIS/GILLOT (REUNION)
 61982 -2091 5559 75 0 1 ---- ST. DENIS, REUNION
 61986 -1645 5962 4 2 4 ---- ST. BRANDON (RAPHAEL ISLAND)
@@ -8097,7 +8112,7 @@
 61996 -3779 7756 29 27 0 ---- MARTIN DE VIVIES (ILE AMSTERDAM)
 61997 -4643 5186 146 146 0 ---- ALFRED FAURE (ILES CROZET)
 61998 -4935 7023 30 29 0 --T- PORT-AUX-FRANCAIS (ILES KERGUELEN)
-62002 3187 1098 621 620 2 ---- NALUT
+62002 3187 1098 621 0 2 ---- NALUT
 62007 3288 1208 3 3 0 ---- ZUARA
 62008 3208 1255 691 691 2 ---- YEFREN
 62010 3270 1308 0 63 0 ---- TRIPOLI INTERNATIONAL AIRPORT
@@ -8105,7 +8120,7 @@
 62011 3215 1301 0 729 0 ---- GARIAN
 62012 3263 1430 22 21 0 ---- EL KHOMS
 62014 3173 1402 259 0 0 ---- BENWLID
-62016 3242 1505 32 32 0 ---- MISURATA
+62016 3242 1522 32 32 0 ---- MISURATA
 62018 3057 1572 90 0 0 ---- ABU NJAYM
 62019 3120 1657 14 13 0 ---- SIRTE
 62053 3210 2027 132 131 0 T-T- BENINA
@@ -9082,6 +9097,7 @@
 68994 -4688 3786 24 0 0 T-T- MARION ISLAND
 68999 -3396 1860 46 46 0 ---- CT-AWS
 70026 7129 -15678 12 12 0 T-T- BARROW/W. POST W. ROGERS
+70027 0 0 0 7 0 TTTT BARROW ARM,NSA
 70086 7013 -14363 15 2 0 ---- BARTER ISLAND
 70104 6888 -16613 0 3 0 ---- CAPE LISBURNE AFS
 70116 6562 -16805 5 9 0 ---- WALES
@@ -10231,6 +10247,7 @@
 72384 3543 -11905 150 149 0 ---- BAKERSFIELD/MEADOWS,  CA.
 72386 3608 -11517 664 662 0 ---- LAS VEGAS/MCCARRAN, NV.
 72387 3661 -11602 1006 1006 0 T-T- MERCURY/DESERT ROCK, NV.
+72388 3604 -11518 0 697 0 TTTT LAS VEGAS,NV
 72389 3677 -11972 100 101 0 ---- FRESNO/AIR TERM.,  CA.
 72390 3567 -12128 21 0 0 ---- SAN SIMEON/PT. PIEDRAS BLANCAS CGLS, CA.
 72391 3411 -11912 0 0 0 ---- POINT MUGU/NAS, CA.
@@ -10478,7 +10495,7 @@
 74001 3460 -8663 175 0 0 ---- REDSTONE ARSENAL, AL.
 74002 3950 -7617 5 0 0 ---- ABERDEEN PROVING GROUNDS, MD.
 74003 4017 -11293 1325 0 0 ---- DUGWAY PROVING GROUNDS, UT.
-74004 3286 -11433 131 0 0 TTTT YUMA PG, tower 3555
+74004 3286 -11433 0 131 0 TTTT YUMA PG, TOWER 3555
 74005 3286 -11403 0 231 0 TTTT YUMA PG,TOWER 31
 74006 3292 -11380 0 145 0 TTTT YUMA PG,TOWER M
 74201 4813 -12340 9 5 0 ---- PORT ANGELES/CGAS, WA.
@@ -10913,16 +10930,17 @@
 78861 1712 -6178 10 0 0 --TP COOLIDGE FIELD,  ANTIGUA (AUX.AFB)
 78862 1712 -6178 10 8 0 ---- VC BIRD INT'L AIRPORT ANTIGUA
 78866 1803 -6312 4 3 0 T-T- JULIANA AIRPORT,  ST. MAARTEN
-78873 1748 -6298 40 39 0 ---- ROOSEVELT AIRPORT ST. EUSTATIUS
+78871 1764 -6322 32 42 0 ---- JUANCHO E. YRAUSQUIN AIRPORT, SABA
+78873 1750 -6298 37 40 0 ---- F.D. ROOSEVELT AIRPORT ST. EUSTATIUS
 78890 1634 -6100 27 27 0 ---- LA DESIRADE METEO
-78891 1630 -6135 0 25 0 ---- LE MOULE
+78891 1630 -6135 0 25 0 ---- LE MOULE RADAR
 78894 1789 -6285 45 44 0 ---- ST. BARTHELEMY METEO
 78896 1626 -6153 9 0 1 ---- POINTE-A-PITRE
 78897 1626 -6152 8 11 0 T-T- LE RAIZET AERO
 78905 1553 -6130 16 14 0 ---- MELVILLE HALL AIRPORT
 78906 1533 -6138 5 5 0 ---- CANEFIELD AIRPORT
 78922 1477 -6088 39 26 0 ---- TRINITE-CARAVELLE
-78924 1450 -6102 0 377 0 ---- LE DIAMANT
+78924 1450 -6102 0 377 0 ---- LE DIAMANT RADAR
 78925 1460 -6100 8 5 0 ---- LAMENTIN-AERO
 78947 1402 -6100 2 2 0 ---- GEORGE F.L. CHARLES AIRPORT
 78948 1375 -6095 10 3 0 ---- HEWANORRA INT'L AIRPORT
@@ -11028,6 +11046,7 @@
 80479 1030 -6823 0 1000 0 ---- PALMICHAL
 81001 680 -5815 2 1 0 ---- GEORGETOWN
 81002 650 -5825 30 28 0 ---- TIMEHRI/CHEDDI JAGAN INTERNATIONAL
+81003 657 -5813 1 0 0 ---- OGLE INTERNATIONAL AIRPORT
 81005 588 -6050 495 494 0 ---- KAMARANG
 81006 337 -5980 82 82 0 ---- LETHEM
 81010 557 -5778 29 28 0 ---- EBINI
@@ -11046,7 +11065,7 @@
 81403 521 -5275 17 12 0 ---- KOUROU CSG
 81405 482 -5237 9 8 0 T-T- CAYENNE MATOURY
 81406 517 -5269 9 0 1 ---- CAYENNE
-81408 389 -5180 7 6 0 ---- SAINT GEORGES
+81408 389 -5180 7 11 0 ---- SAINT GEORGES
 81415 364 -5403 107 106 0 ---- MARIPASOULA
 81609 381 -5186 21 19 0 ---- OIAPOQUE
 81615 280 -6065 96 94 0 ---- BOA VISTA
@@ -12341,6 +12360,7 @@
 89004 -7170 -280 817 815 0 ---- S.A.N.A.E. AWS
 89005 -7420 -975 1440 0 0 ---- KOTTAS ARGOS ID 3314
 89009 -9000 0 2835 0 0 T-T- AMUNDSEN-SCOTT
+89011 -7136 -1002 574 572 0 ---- SOERASEN
 89013 -8277 -1305 1968 0 0 ---- BALDRICK AWS
 89014 -7305 -1338 497 0 0 ---- NORDENSKIOLD BASE
 89016 -7309 -1315 363 0 0 ---- WASA EP5
@@ -12349,6 +12369,7 @@
 89022 -7544 -2622 0 30 0 --T- HALLEY
 89034 -7787 -3461 256 0 0 ---- BASE BELGRANO II
 89042 -6072 -4560 6 0 0 ---- SIGNY ISLAND
+89047 -8044 -4443 105 103 0 ---- FILCHNER
 89049 -8567 -4638 1860 0 0 ---- AGO-2
 89050 -6220 -5889 15 14 0 ---- BELLINGSHAUSEN
 89052 -6217 -5847 2 3 0 ---- ARCTOWSKI
@@ -12612,11 +12633,11 @@
 91565 -1945 16922 8 0 0 ---- WHITE GRASS AIRPORT
 91568 -2023 16977 7 6 0 ---- ANEITYUM
 91570 -1848 16309 4 4 0 ---- ILE SURPRISE
-91571 -2046 16422 0 595 0 ---- THIEBAGI RADAR
+91571 -2046 16422 0 595 0 ---- TIEBAGHI RADAR
 91573 -1972 16366 84 93 0 ---- ILE ART (BELEP)
 91574 -1997 15847 6 4 0 ---- ILE LOOP (CHESTERFIELD)
 91577 -2056 16428 19 25 0 ---- KOUMAC (NLLE-CALEDONIE)
-91579 -2064 16657 9 16 0 ---- OULOUP (ILE OUVEA)
+91579 -2064 16657 9 7 0 ---- OULOUP (ILE OUVEA)
 91582 -2078 16724 32 29 0 ---- OUANAHAM (ILE LIFOU)
 91583 -2093 16533 14 14 0 ---- POINDIMIE (NLLE-CALEDONIE)
 91587 -2148 16804 48 42 0 ---- LA ROCHE (ILE MARE)
@@ -12727,7 +12748,7 @@
 91945 -1991 -14494 3 2 0 ---- HEREHERETUE
 91948 -2313 -13497 89 91 0 T--- MANGAREVA
 91952 -2182 -13880 3 2 0 ---- MURUROA *
-91954 -2337 -14953 4 3 0 ---- TUBUAI AERO
+91954 -2337 -14953 6 5 0 ---- TUBUAI AERO
 91958 -2762 -14433 2 2 0 ---T RAPA
 91960 -2507 -13010 265 264 0 ---- PITCAIRN
 91961 -2507 -13010 265 264 0 ---- PITCAIRN ISLAND AWS A
diff --git a/src/Thermo/MTHERMOGRIDDef b/src/Thermo/MTHERMOGRIDDef
index 511fe49..90ae603 100644
--- a/src/Thermo/MTHERMOGRIDDef
+++ b/src/Thermo/MTHERMOGRIDDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
 	COLOUR {
-		%include MagicsColors.h
+		%include MagicsColours.txt
 	}
 	STYLE {
 		SOLID; SOLID
diff --git a/src/Thermo/MThermoDef b/src/Thermo/MThermoDef
index 173fc07..a83c9a3 100644
--- a/src/Thermo/MThermoDef
+++ b/src/Thermo/MThermoDef
@@ -1,7 +1,7 @@
 PARAMSHARE ; ParamShare; PARAMSHARE
 {
    COLOUR {
-      %include MagicsColors.h
+      %include MagicsColours.txt
    }
 
    STYLE {
diff --git a/src/libMetview/MvObs.cc b/src/libMetview/MvObs.cc
index e4a3f05..f093c97 100644
--- a/src/libMetview/MvObs.cc
+++ b/src/libMetview/MvObs.cc
@@ -2876,6 +2876,7 @@ MvObs::OperaRadarImage(  )
       throw MvException( "MvObs::OperaRadarImage: unable to get Row Number element!" );
    }
                                                      //-- "FortranIndex": 0,1,2,...
+   // the following line assigns an unused variable, but the line is still essential
    int rowRepeatCount = (*this)[firstRowStartIndex]; //-- operator[i], i=1,2,3,...
    long currentDescr = currentDescriptor();
    if( currentDescr != 31002 )
diff --git a/src/libMetview/MvRequest.cc b/src/libMetview/MvRequest.cc
index 891d661..f73568d 100644
--- a/src/libMetview/MvRequest.cc
+++ b/src/libMetview/MvRequest.cc
@@ -940,15 +940,30 @@ bool MvRequest::getPath(const char* par,string &resPath,bool canBeEmpty,string &
 			if(callerIcon)
 			{
 	  			string callerDir(callerIcon);	  	
-                char *mvudir=getenv("METVIEW_USER_DIRECTORY");
-                if(mvudir)
+
+				// special case: if callerDir is a path with "Process@" in it, then it
+				// very probably means that this was run from a macro - in this case, we can't
+				// use the returned path (because it's invalid) and instead a relative path should be
+				// considred relative to where the macro is run from; so in this case we would simply
+				// remove the path.
+
+				if(callerDir.find("Process@") != string::npos)
 				{
-	  				callerDir=string(mvudir) + "/" + callerDir;
-				}	
-				string::size_type pos=callerDir.find_last_of("/");
-	 			if(pos != string::npos)
+					// yes, it's called from Macro - files are relative to current dir
+					callerDir = ".";
+				}
+				else
 				{
-		 			callerDir=callerDir.substr(0,pos);
+					char *mvudir=getenv("METVIEW_USER_DIRECTORY");
+					if(mvudir)
+					{
+						callerDir=string(mvudir) + "/" + callerDir;
+					}	
+					string::size_type pos=callerDir.find_last_of("/");
+	 				if(pos != string::npos)
+					{
+		 				callerDir=callerDir.substr(0,pos);
+					}
 				}
 					
 				resPath=callerDir + "/" + resPath;
diff --git a/src/libMetview/MvScanFileType.cc b/src/libMetview/MvScanFileType.cc
index a18b511..845c0f9 100644
--- a/src/libMetview/MvScanFileType.cc
+++ b/src/libMetview/MvScanFileType.cc
@@ -94,7 +94,7 @@ static eFileType SearchMarsParserBreakers( const char* fileName )
    char buf;
    int  chr;
 
-   int readCount = fread(&buf, 1, 1, f.f_);
+   fread(&buf, 1, 1, f.f_);
    chr = (int) buf;
 
    for( int ci=0; ci<CHECKLEN; ++ci ) //-- look for "binary" chars
@@ -111,7 +111,7 @@ static eFileType SearchMarsParserBreakers( const char* fileName )
        if( isNumbersOnly )
            isNumbersOnly = isNumbersOnly && isValidForNumbersOnly(chr);
 
-       readCount = fread(&buf, 1, 1, f.f_);
+       fread(&buf, 1, 1, f.f_);
        chr = (int) buf;
      }
 
diff --git a/src/libMvQtGui/MvQCheckBoxCombo.cc b/src/libMvQtGui/MvQCheckBoxCombo.cc
index 167eb6c..46e0f35 100644
--- a/src/libMvQtGui/MvQCheckBoxCombo.cc
+++ b/src/libMvQtGui/MvQCheckBoxCombo.cc
@@ -66,7 +66,7 @@ QWidget* MvQCheckBoxComboDelegate::createEditor(QWidget *parent,
 
 void MvQCheckBoxComboDelegate::slotCheckBoxStateChanged(int checked)
 {
-	bool b=checked;
+//	bool b=checked;
 //	qDebug() << b;
 
 	commmitAndCloseEditor();
diff --git a/src/libMvQtGui/MvQKeyDialog.cc b/src/libMvQtGui/MvQKeyDialog.cc
index 81b66a9..bd0ffe8 100644
--- a/src/libMvQtGui/MvQKeyDialog.cc
+++ b/src/libMvQtGui/MvQKeyDialog.cc
@@ -41,8 +41,6 @@
 
 MvQKeyProfileDialog::MvQKeyProfileDialog(QString title,MvQKeyManager *manager,int currentRow,QWidget *parent) : QWidget(parent), manager_(manager)
 {
-	QLabel *label;
-	
 	QVBoxLayout *layout=new QVBoxLayout;
 	setLayout(layout);
 
@@ -853,8 +851,6 @@ void MvQKeyImportPage::slotImport()
 
 MvQKeyEditDialog::MvQKeyEditDialog(MvKey *key,QWidget *parent) : QDialog(parent), key_(key)
 {
-	QLabel *label;
-	
 	setWindowTitle(tr("Edit key"));
 
 	QVBoxLayout *layout=new QVBoxLayout;
diff --git a/src/libMvQtGui/MvQKeyProfileTree.cc b/src/libMvQtGui/MvQKeyProfileTree.cc
index a3258f1..f8778c2 100644
--- a/src/libMvQtGui/MvQKeyProfileTree.cc
+++ b/src/libMvQtGui/MvQKeyProfileTree.cc
@@ -104,7 +104,6 @@ void MvQKeyProfileTree::slotMessageTreeContextMenu(const QPoint &position)
 	if(prof==0 || section >= static_cast<int>(prof->size()))
 		return;
 
-	bool keyEditable=prof->at(section)->editable();
 		
 	QList<QAction*> actions;
 
@@ -124,6 +123,7 @@ void MvQKeyProfileTree::slotMessageTreeContextMenu(const QPoint &position)
 	//Edit
 	
 #ifdef METVIEW_EXPERIMENTAL
+	bool keyEditable=prof->at(section)->editable();
 	QAction *actionEdit;
 	if(keyEditable)
 	{
diff --git a/src/libUtil/CMakeLists.txt b/src/libUtil/CMakeLists.txt
index 92983b4..16a4940 100644
--- a/src/libUtil/CMakeLists.txt
+++ b/src/libUtil/CMakeLists.txt
@@ -43,6 +43,11 @@ Types.hpp griddoc.hpp imagedoc.hpp proj_braz.hpp stypes.hpp
 TableReader.h
 Tokenizer.h)
 
+if (ENABLE_URL_DOWNLOAD)
+    list (APPEND libUtil_srcs MvNetwork.cc)
+endif()
+
+
 
 #foreach( file ${_libUtil_srcs} )
 #  list( APPEND libUtil_srcs libUtil/${file} )
diff --git a/src/libUtil/Grib.cc b/src/libUtil/Grib.cc
index ef4a35c..243b919 100644
--- a/src/libUtil/Grib.cc
+++ b/src/libUtil/Grib.cc
@@ -1908,9 +1908,9 @@ void
 GribData :: SetScale ( double vmin, double vmax, int nbits)
 {
 	long	scale;
-	double	x;
+	//double	x;
 
-	x = log10((vmax - vmin) / (pow(2.,(double)(nbits+1.))-1.)) / log10(2.);
+	//x = log10((vmax - vmin) / (pow(2.,(double)(nbits+1.))-1.)) / log10(2.);
 
 	scale = (long) floor((log10(((double)vmax-(double)vmin) / (pow(2.,(double)nbits+1.) -1.)) / log10(2.)) +2);
 
diff --git a/src/libUtil/MvAlmostObsoleteRequest.cc b/src/libUtil/MvAlmostObsoleteRequest.cc
index 8093f14..e4c5ef5 100644
--- a/src/libUtil/MvAlmostObsoleteRequest.cc
+++ b/src/libUtil/MvAlmostObsoleteRequest.cc
@@ -39,7 +39,7 @@ MvDataGen :: MvDataGen (svcid *i,request* r, const char* typ)
 	set_value (req,"PATH","%s", datafile);
 
 	const char* tmp;
-	if (tmp = get_value (req, "_NAME", 0))
+	if ((tmp = get_value (req, "_NAME", 0)))
 		setElemName (tmp);
 	else
 		setElemName (datafile);
@@ -99,10 +99,10 @@ MvDataGen :: SendStatus (const char* st)
 	const char* tmp;
 
 	set_value (status, "STATUS", "%s", st);
-	if (tmp = get_value (req, "_NAME", 0))
+	if ((tmp = get_value (req, "_NAME", 0)))
 		set_value (status, "NAME", "%s", tmp);
 
-	if (tmp = get_value (req, "_ICON_CLASS", 0))
+	if ((tmp = get_value (req, "_ICON_CLASS", 0)))
 		set_value (status, "ICON_CLASS", "%s", tmp);
 
 	send_message (id->s, status);
@@ -150,12 +150,12 @@ MvDataVis :: MvDataVis (svcid *i,request* r)
 	unlink (tmpfile);
 
 	const char* tmp;
-	if (tmp = get_value (req, "_LOT_NAME", 0))
+	if ((tmp = get_value (req, "_LOT_NAME", 0)))
 		setElemName (tmp);
 	else
 		setElemName (tmpfile);
 
-	if (tmp = get_value (req, "_LOT_COUNT", 0))
+	if ((tmp = get_value (req, "_LOT_COUNT", 0)))
 		tasks = atoi (tmp);
 
 // Build the reply request.
diff --git a/src/libUtil/MvNetwork.cc b/src/libUtil/MvNetwork.cc
new file mode 100644
index 0000000..d6f527b
--- /dev/null
+++ b/src/libUtil/MvNetwork.cc
@@ -0,0 +1,249 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#include <stdlib.h>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+
+#include "MvApplication.h"
+#include "MvNetwork.h"
+
+
+using std::cout;
+using std::endl;
+
+// 7.21.0
+#define MINCURLVERSIONFORWILDCARD  0x071500
+
+// 7.14.1
+#define MINCURLVERSIONFORPROXY     0x070E01
+
+// 7.19.4
+#define MINCURLVERSIONFORNOPROXY   0x071304
+
+
+// ----------------------------------------------------------------------------
+// MvNetworkData
+// Holds and manages the buffer to store data resulting from a network transfer
+// ----------------------------------------------------------------------------
+
+MvNetworkData::~MvNetworkData()
+{
+    if(buffer_)
+        free(buffer_);
+}
+
+void MvNetworkData::clear()
+{
+    buffer_=0;
+    pos_=0;
+    len_=0;
+}    
+
+size_t MvNetworkData::add(char *ptr,size_t size)
+{
+    if(buffer_ == NULL)
+    {
+        pos_=0;
+        len_    = initialSize_;
+        buffer_ = static_cast<char*>(malloc(len_));
+    }
+
+    if(pos_ + size > len_) 
+    {
+        while(pos_ + size > len_) {
+            len_ *= 2;
+        }
+
+        buffer_ =static_cast<char*>(realloc(buffer_,len_));
+        if(!buffer_)
+        {
+            //error_++;
+            return 0;
+        }
+    }
+
+    memcpy(buffer_ + pos_, ptr, size);
+    pos_ += size;
+    
+    return size;
+}
+
+string MvNetworkData::toString()
+{
+    if(buffer_ && len_ >0 )
+    {          
+        return string(buffer_ + '\0');  
+    }
+    return string();
+}      
+
+
+
+// ---------------------------------------------------------------------- 
+// MvNetwork
+// Handles the data request and writes the data to the requested location
+// ---------------------------------------------------------------------- 
+
+MvNetwork::MvNetwork()
+{
+    ch_=curl_easy_init();
+//    curl_version_info_data *cvi = curl_version_info(CURLVERSION_NOW);
+    
+    curl_easy_setopt(ch_,CURLOPT_HEADER,1); 
+
+    curl_easy_setopt(ch_,CURLOPT_WRITEFUNCTION,MvNetwork::writeCb); 
+    curl_easy_setopt(ch_,CURLOPT_WRITEDATA,this); 
+    
+    curl_easy_setopt(ch_,CURLOPT_HEADER,0); 
+    curl_easy_setopt(ch_,CURLOPT_HEADERFUNCTION,MvNetwork::headerCb);
+    curl_easy_setopt(ch_,CURLOPT_HEADERDATA,this);    
+
+    curl_easy_setopt(ch_,CURLOPT_FOLLOWLOCATION,1); // some WMS servers redirect URLs   
+    curl_easy_setopt(ch_,CURLOPT_VERBOSE,1);
+
+
+    // long minVersionForWildcard = (7 << 16) | (21 << 8) | 0;
+//    if (cvi->version_num >= minVersionForWildcard)
+    #if LIBCURL_VERSION_NUM >= MINCURLVERSIONFORWILDCARD
+        curl_easy_setopt(ch_,CURLOPT_WILDCARDMATCH,0);  // don't try to match wildcard chars
+    #endif
+
+    setupProxy();
+}
+
+
+void MvNetwork::setupProxy()
+{
+
+    // get the Metview user preferences
+    MvRequest myPref = MvApplication::getExpandedPreferences();
+
+    bool use = false;
+    const char* useProxy = myPref("USE_NETWORK_PROXY");
+    if((useProxy != NULL))
+        use = ( strcmp(useProxy, "Yes") == 0 || 
+                strcmp(useProxy, "YES") == 0 ||
+                strcmp(useProxy, "yes") == 0 ) ? true : false;
+
+    if(use)
+    {
+#if LIBCURL_VERSION_NUM >= MINCURLVERSIONFORPROXY
+        const char* proxyUrl = myPref("PROXY_URL");
+        if (proxyUrl)
+        {
+            curl_easy_setopt(ch_, CURLOPT_PROXY, proxyUrl);
+            cout << "Using user proxy URL: " << proxyUrl << std::endl;
+        }
+#else
+        cout << "Curl version is not new enough to support CURLOPT_PROXY - proxy setting not applied." << std::endl;
+#endif
+
+        const char* proxyPort = myPref("PROXY_PORT");
+        if(proxyPort)
+        {
+            curl_easy_setopt(ch_, CURLOPT_PROXYPORT, atoi(proxyPort));
+            cout << "Using user proxy port: " << proxyPort << std::endl;
+        }
+
+
+#if LIBCURL_VERSION_NUM >= MINCURLVERSIONFORNOPROXY
+        const char* noProxy = myPref("NO_PROXY_FOR");  // comma-separated list
+        if(noProxy)
+        {
+            curl_easy_setopt(ch_, CURLOPT_NOPROXY, noProxy);
+            cout << "Using user no_proxy: " << noProxy << std::endl;
+        }
+#else
+        cout << "Curl version is not new enough to support CURLOPT_NOPROXY - no_proxy setting not applied." << std::endl;
+#endif
+    }
+}
+
+
+bool MvNetwork::get(const string& req, const string& outfile, const string mimeType, string &errorMsg)
+{
+    curl_easy_setopt(ch_,CURLOPT_URL,req.c_str());
+    outFile_=outFile_;
+
+    // perform the actual network transfer
+    CURLcode ret=curl_easy_perform(ch_);    
+
+    if (ret != CURLE_OK)
+    {
+        errorMsg = curl_easy_strerror(ret);
+        return false;
+    }
+
+    cout << "data size " << data_.len_ << endl;
+
+    if (data_.len_ == 0)
+    {
+        errorMsg = "No bytes received.";
+        return false;
+    }
+
+    // get the response code
+    curl_easy_getinfo(ch_, CURLINFO_RESPONSE_CODE, &responseCode_);
+
+
+    // write the data buffer to a file
+    std::ofstream out;                
+    out.open(outfile.c_str());
+
+    if(out.good())
+    {
+        out.write(data_.buffer_, data_.pos_);
+        out.close();
+        cout << "outfile " << outfile << endl;
+    }
+    else
+    {
+        errorMsg = "Could not open file for writing: " + outfile;
+        return false;
+    }
+    
+
+    // in case CURL did anything to change the URL...
+    const char *usedUrl;
+    curl_easy_getinfo(ch_, CURLINFO_EFFECTIVE_URL, &usedUrl); 
+    cout << "Used URL: " << usedUrl << endl;
+
+    data_.clear();  // clear the data buffer
+    return true;
+}  
+
+size_t MvNetwork::writeCb(char *ptr,size_t size,size_t nmemb,void *userdata)
+{
+    //cout << "writeCB " << size*nmemb <<  endl;    
+    if(!userdata)
+        return 0;
+    
+    if(MvNetwork* obj=static_cast<MvNetwork*>(userdata))
+    {
+        return obj->data_.add(ptr,size*nmemb);
+    }
+    
+    return 0;
+}
+
+size_t MvNetwork::headerCb(char *ptr,size_t size,size_t nmemb,void *userdata)
+{
+    if(!userdata)
+        return 0;
+    
+    if(MvNetwork* obj=static_cast<MvNetwork*>(userdata))
+    {
+        return obj->header_.add(ptr,size*nmemb);
+    }
+    
+    return 0;
+}
+
diff --git a/src/libUtil/MvNetwork.h b/src/libUtil/MvNetwork.h
new file mode 100644
index 0000000..f562b7c
--- /dev/null
+++ b/src/libUtil/MvNetwork.h
@@ -0,0 +1,69 @@
+/***************************** LICENSE START ***********************************
+
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
+ of the Apache License version 2.0. In applying this license, ECMWF does not
+ waive the privileges and immunities granted to it by virtue of its status as
+ an Intergovernmental Organization or submit itself to any jurisdiction.
+
+ ***************************** LICENSE END *************************************/
+
+#ifndef MVNETWORK_H
+#define MVNETWORK_H
+
+
+#include <string.h>
+#include <curl/curl.h>  // needed because we use the CURL type in MvNetwork
+using std::string;
+
+
+// ----------------------------------------------------------------------------
+// MvNetworkData
+// Holds and manages the buffer to store data resulting from a network transfer
+// ----------------------------------------------------------------------------
+
+class MvNetworkData
+{
+public:
+    MvNetworkData() : buffer_(0),pos_(0),len_(0), initialSize_(10240) {}
+    ~MvNetworkData();
+    
+    void clear();
+    
+    size_t add(char *ptr,size_t size);
+    string toString();
+        
+    char* buffer_;
+    size_t pos_;
+    size_t len_;
+    const size_t initialSize_;
+};  
+
+
+
+// ---------------------------------------------------------------------- 
+// MvNetwork
+// Handles the data request and writes the data to the requested location
+// ---------------------------------------------------------------------- 
+
+class MvNetwork
+{
+public:
+    MvNetwork();
+    bool get(const string&, const string&, const string, string&);
+    string header() {return header_.toString();}
+    long   responseCode() {return responseCode_;}
+    
+protected:
+    void setupProxy();
+    static size_t writeCb(char *ptr,size_t size,size_t nmemb,void *userdata);
+    static size_t headerCb(char *ptr,size_t size,size_t nmemb,void *userdata);
+
+    CURL *ch_;
+    string outFile_;
+    MvNetworkData data_;
+    MvNetworkData header_;
+    long responseCode_;
+};
+
+
+#endif //MVNETWORK_H
diff --git a/src/libUtil/MvOdb.cc b/src/libUtil/MvOdb.cc
index b3e280f..af0ec5e 100644
--- a/src/libUtil/MvOdb.cc
+++ b/src/libUtil/MvOdb.cc
@@ -1033,7 +1033,6 @@ int MvOldOdb::findColumn(string cname)
 {
 	readMetaData();
 
-	int colPos=-1;
 	for(int i=0; i < static_cast<int>(column_.size()) ; i++)
 	{
 		if(cname == column_[i]->name())
diff --git a/src/libUtil/TableReader.cc b/src/libUtil/TableReader.cc
index 48e2e11..ad27966 100644
--- a/src/libUtil/TableReader.cc
+++ b/src/libUtil/TableReader.cc
@@ -1,33 +1,12 @@
 /***************************** LICENSE START ***********************************
 
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
  of the Apache License version 2.0. In applying this license, ECMWF does not
  waive the privileges and immunities granted to it by virtue of its status as
  an Intergovernmental Organization or submit itself to any jurisdiction.
 
  ***************************** LICENSE END *************************************/
 
-/*******************************  LICENSE  *******************************
-
-
- Copyright 2011 European Centre for Medium-Range Weather Forecasts (ECMWF)
- 
- Licensed under the Apache License, Version 2.0 (the "License"); 
- you may not use this file except in compliance with the License. 
- You may obtain a copy of the License at 
- 
- 	http://www.apache.org/licenses/LICENSE-2.0
- 
- Unless required by applicable law or agreed to in writing, software 
- distributed under the License is distributed on an "AS IS" BASIS, 
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- See the License for the specific language governing permissions and 
- limitations under the License.
-
-
- *******************************  LICENSE  *******************************/
-
-
 #include "TableReader.h"
 
 
diff --git a/src/libUtil/TableReader.h b/src/libUtil/TableReader.h
index 002c232..f999c10 100644
--- a/src/libUtil/TableReader.h
+++ b/src/libUtil/TableReader.h
@@ -1,32 +1,12 @@
 /***************************** LICENSE START ***********************************
 
- Copyright 2012 ECMWF and INPE. This software is distributed under the terms
+ Copyright 2016 ECMWF and INPE. This software is distributed under the terms
  of the Apache License version 2.0. In applying this license, ECMWF does not
  waive the privileges and immunities granted to it by virtue of its status as
  an Intergovernmental Organization or submit itself to any jurisdiction.
 
  ***************************** LICENSE END *************************************/
 
-/*******************************  LICENSE  *******************************
-
-
- Copyright 2011 European Centre for Medium-Range Weather Forecasts (ECMWF)
- 
- Licensed under the Apache License, Version 2.0 (the "License"); 
- you may not use this file except in compliance with the License. 
- You may obtain a copy of the License at 
- 
- 	http://www.apache.org/licenses/LICENSE-2.0
- 
- Unless required by applicable law or agreed to in writing, software 
- distributed under the License is distributed on an "AS IS" BASIS, 
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
- See the License for the specific language governing permissions and 
- limitations under the License.
-
-
- *******************************  LICENSE  *******************************/
-
 #ifndef TableReader_H
 #define TableReader_H
 
diff --git a/src/libUtil/proj_braz.cc b/src/libUtil/proj_braz.cc
index 8a1b358..9dec7ec 100644
--- a/src/libUtil/proj_braz.cc
+++ b/src/libUtil/proj_braz.cc
@@ -23,14 +23,15 @@
 static Datum			*D;
 static SProjection		*Sp1,*Sp2;
 static GeneralProjection	*Gp1,*Gp2;
-static CylindEquid		*Ce1,*Ce2;
-static PolarStereo		*Ps1,*Ps2;
+//static CylindEquid		*Ce1,*Ce2;
+//static PolarStereo		*Ps1,*Ps2;
 static Satellite		*Sat1,*Sat2;
 static SImage			*Imi,*Imo;
 static BBox				*B1,*B2;
 static CPoint				*P1,*P2,*P3,*P4;
+static int XXX = 0;
 
-static char		*txd,*tx1,*tx2,*tx3,*tx4,tmp1[M_NAME_MAX],tmp2[M_NAME_MAX];
+static char		*tx1,*tx2,*tx3,*tx4;
 
 Real pWidth(BBox *b)
 {
@@ -482,7 +483,6 @@ void pimin1_()
 
 void pimind_(int i1, char *tx, Real Pdx, Real Pdy, Real Pdz, double Prd, double Pflt)
 {
-	int		i;
 	short		Pcode;
 
 	/* Define and Initialize Datum and Projection */
@@ -895,7 +895,7 @@ void ChangeLL(SProjection *Sp, double *lon1, double *lat1)
 		z2,
 		d,lat2,	/* Ancillary variable */
 		lon2;
-	Real	Pdx,Pdy,Pdz,tmp;
+	Real	Pdx,Pdy,Pdz;
 	double	Prd,Pflt;
 
 	Pdx = Sp->Pdx;
@@ -1199,17 +1199,17 @@ CPoint pPolLL2PC (SProjection *Sp, CPoint ptll)
 		t,ro,aux1,aux2,aux3,ptllx,ptlly;
 	short	GPhemis;
 	double	Pflt,Prd;
-	double	GPlat0,GPlon0,GPstlat1,GPstlat2;
+	double	GPlon0;
 	CPoint ppc;
 	
 	ptllx = (double)ptll.X;
 	ptlly = (double)ptll.Y;
 
 	GPhemis = Sp->Proj.Gp->GPhemis;
-	GPlat0 = Sp->Proj.Gp->GPlat0;
+	//GPlat0 = Sp->Proj.Gp->GPlat0;
 	GPlon0 = Sp->Proj.Gp->GPlon0;
-	GPstlat1 = Sp->Proj.Gp->GPstlat1;
-	GPstlat2 = Sp->Proj.Gp->GPstlat2;
+	//GPstlat1 = Sp->Proj.Gp->GPstlat1;
+	//GPstlat2 = Sp->Proj.Gp->GPstlat2;
 
 	Pflt = Sp->Pflt;
 	Prd = Sp->Prd;
@@ -1255,7 +1255,7 @@ CPoint pPolPC2LL (SProjection *Sp, CPoint ptpc)
 		lon0,			/* auxilliary origin longitude */
 		ro,t,xx,aux1,aux2,aux3,aux4,aux5,ptpcx,ptpcy,px,py;
 	short	GPhemis;
-	double	GPlat0,GPlon0,GPstlat1,GPstlat2;
+	double	GPlon0;
 	double	Pflt,Prd;
 	CPoint ppc;
 
@@ -1263,10 +1263,10 @@ CPoint pPolPC2LL (SProjection *Sp, CPoint ptpc)
 	py = (double)ptpc.Y;
 
 	GPhemis = Sp->Proj.Gp->GPhemis;
-	GPlat0 = Sp->Proj.Gp->GPlat0;
+	//GPlat0 = Sp->Proj.Gp->GPlat0;
 	GPlon0 = Sp->Proj.Gp->GPlon0;
-	GPstlat1 = Sp->Proj.Gp->GPstlat1;
-	GPstlat2 = Sp->Proj.Gp->GPstlat2;
+	//GPstlat1 = Sp->Proj.Gp->GPstlat1;
+	//GPstlat2 = Sp->Proj.Gp->GPstlat2;
 
 	Pflt = Sp->Pflt;
 	Prd = Sp->Prd;
@@ -1347,19 +1347,19 @@ CPoint pMerLL2PC (SProjection *Sp, CPoint ptll)
 	double	equad,			/*Squared eccentricity  */
 		aux1,			/* Ancillary variables */
 		aux2,aux3,aux4,aux5,aux6,ptllx,ptlly;
-	short	GPhemis;
+	//short	GPhemis;
 	double	Pflt,Prd;
-	double	GPlat0,GPlon0,GPstlat1,GPstlat2;
+	double	GPlon0,GPstlat1;
 	CPoint	ppc;
 
 	ptllx = (double)ptll.X;
 	ptlly = (double)ptll.Y;
 
-	GPhemis = Sp->Proj.Gp->GPhemis;
-	GPlat0 = Sp->Proj.Gp->GPlat0;
+	//GPhemis = Sp->Proj.Gp->GPhemis;
+	//GPlat0 = Sp->Proj.Gp->GPlat0;
 	GPlon0 = Sp->Proj.Gp->GPlon0;
 	GPstlat1 = Sp->Proj.Gp->GPstlat1;
-	GPstlat2 = Sp->Proj.Gp->GPstlat2;
+	//GPstlat2 = Sp->Proj.Gp->GPstlat2;
 
 	Pflt = Sp->Pflt;
 	Prd = Sp->Prd;
@@ -1390,19 +1390,19 @@ CPoint pMerPC2LL (SProjection *Sp, CPoint ptpc)
 	double	equad,			/*Squared eccentricity  */
 		t,			/* Ancillary variables */
 		xx,aux1,aux2,aux3,aux4,aux5,ptpcx,ptpcy;
-	short	GPhemis;
-	double	GPlat0,GPlon0,GPstlat1,GPstlat2;
+	//short	GPhemis;
+	double	GPlon0,GPstlat1;
 	double	Pflt,Prd;
 	CPoint	ppc;
 
 	ptpcx = (double)ptpc.X;
 	ptpcy = (double)ptpc.Y;
 
-	GPhemis = Sp->Proj.Gp->GPhemis;
-	GPlat0 = Sp->Proj.Gp->GPlat0;
+	//GPhemis = Sp->Proj.Gp->GPhemis;
+	//GPlat0 = Sp->Proj.Gp->GPlat0;
 	GPlon0 = Sp->Proj.Gp->GPlon0;
 	GPstlat1 = Sp->Proj.Gp->GPstlat1;
-	GPstlat2 = Sp->Proj.Gp->GPstlat2;
+	//GPstlat2 = Sp->Proj.Gp->GPstlat2;
 
 	Pflt = Sp->Pflt;
 	Prd = Sp->Prd;
diff --git a/src/libUtil/proj_braz.hpp b/src/libUtil/proj_braz.hpp
index 5f78d0d..8fb05f2 100644
--- a/src/libUtil/proj_braz.hpp
+++ b/src/libUtil/proj_braz.hpp
@@ -254,7 +254,7 @@ typedef struct SProjection
 	rx,		/* / horizontal resolution in meters */
 	ry;		/*  vertical resolution in meters */
 } ImageDoc;
- static int XXX = 0;
+
 typedef struct
 {
         SProjection*    IProj;  /* pointer to projection */
diff --git a/src/uPlot/MagPlusBatchService.cc b/src/uPlot/MagPlusBatchService.cc
index a479422..47e9d68 100644
--- a/src/uPlot/MagPlusBatchService.cc
+++ b/src/uPlot/MagPlusBatchService.cc
@@ -26,7 +26,7 @@ MagPlusBatchService::CallMagPlus ( MvRequest& in )
     {
         std::string errorMsg("Could not produce plot: ");
         errorMsg += e.what();
-        PlotMod::Instance().MetviewError ("errorMsg","Error");
+        PlotMod::Instance().MetviewError (errorMsg, "Error");
     }
 	//thread_.render(in,magplus_);
 
diff --git a/test/data/fc_data.grib b/test/data/fc_data.grib
new file mode 100644
index 0000000..5354bae
Binary files /dev/null and b/test/data/fc_data.grib differ
diff --git a/test/data/gpt_to_grib_exp_mean_reference.grb b/test/data/gpt_to_grib_exp_mean_reference.grb
new file mode 100644
index 0000000..b7967df
Binary files /dev/null and b/test/data/gpt_to_grib_exp_mean_reference.grb differ
diff --git a/test/data/gpt_to_grib_exp_sum_reference.grb b/test/data/gpt_to_grib_exp_sum_reference.grb
new file mode 100644
index 0000000..8e45d5a
Binary files /dev/null and b/test/data/gpt_to_grib_exp_sum_reference.grb differ
diff --git a/test/data/gpt_to_grib_nearest_count_reference.grb b/test/data/gpt_to_grib_nearest_count_reference.grb
new file mode 100644
index 0000000..fe54020
Binary files /dev/null and b/test/data/gpt_to_grib_nearest_count_reference.grb differ
diff --git a/test/data/gpt_to_grib_nearest_mean_reference.grb b/test/data/gpt_to_grib_nearest_mean_reference.grb
new file mode 100644
index 0000000..649d715
Binary files /dev/null and b/test/data/gpt_to_grib_nearest_mean_reference.grb differ
diff --git a/test/data/gpt_to_grib_nearest_sum_reference.grb b/test/data/gpt_to_grib_nearest_sum_reference.grb
new file mode 100644
index 0000000..2b8d368
Binary files /dev/null and b/test/data/gpt_to_grib_nearest_sum_reference.grb differ
diff --git a/test/data/gpt_to_grib_reciprocal_reference.grb b/test/data/gpt_to_grib_reciprocal_reference.grb
new file mode 100644
index 0000000..1a1e8e3
Binary files /dev/null and b/test/data/gpt_to_grib_reciprocal_reference.grb differ
diff --git a/test/data/t1000_LL_7x7.grb b/test/data/t1000_LL_7x7.grb
new file mode 100644
index 0000000..bbda7ab
Binary files /dev/null and b/test/data/t1000_LL_7x7.grb differ
diff --git a/test/macros/CMakeLists.txt b/test/macros/CMakeLists.txt
index 1b8c6d6..d7c2e76 100644
--- a/test/macros/CMakeLists.txt
+++ b/test/macros/CMakeLists.txt
@@ -34,6 +34,10 @@ if(ENABLE_PLOTTING)
                        RESOURCES set_output.mv ../data/z500.grb)
 endif()
 
+
+metview_macro_test(MACRO     grib_dates.mv
+                   RESOURCES  ../data/fc_data.grib)
+
 metview_macro_test(MACRO     grib_nearest_gridpoint.mv
                    RESOURCES  ../data/t1000_LL_1x1.grb
                               ../data/t1000_LL_1x1_subarea.grb
@@ -51,9 +55,22 @@ metview_macro_test(MACRO     interpolation_rgg_to_ll.mv
 metview_macro_test(MACRO     grib_to_gpt.mv
                    RESOURCES  ../data/t1000_LL_2x2.grb)
 
+metview_macro_test(MACRO     gpt_to_grib_core.mv
+                   RESOURCES  ../data/bufr_obs_filter_reference.gpt
+                              ../data/gpt_to_grib_reciprocal_reference.grb
+                              ../data/gpt_to_grib_exp_mean_reference.grb
+                              ../data/gpt_to_grib_exp_sum_reference.grb)
+
 metview_macro_test(MACRO     gpt_to_grib_with_template.mv
                    RESOURCES  ../data/t1000_LL_2x2.grb ../data/10U_GG.grb)
 
+metview_macro_test(MACRO     gpt_to_grib_nearest.mv
+                   RESOURCES  ../data/t1000_LL_7x7.grb
+                              ../data/example_XYLDTZ.geo
+                              ../data/gpt_to_grib_nearest_sum_reference.grb
+                              ../data/gpt_to_grib_nearest_mean_reference.grb
+                              ../data/gpt_to_grib_nearest_count_reference.grb)
+
 #metview_macro_test(MACRO     interpolation_gg_to_subarea.mv
 #                   RESOURCES  ../data/10U_GG.grb)
 
diff --git a/test/macros/HelloWorld.mv b/test/macros/HelloWorld.mv
index 02e41d6..7602120 100644
--- a/test/macros/HelloWorld.mv
+++ b/test/macros/HelloWorld.mv
@@ -17,7 +17,8 @@ data = read("z500.grb")
 
 set_output("HelloWorld")
 
-plot(data)
+# we add an empty mcont() definition to bypass any custom defaults the user has
+plot(data, mcont())
 
 wait_for_output()
 check_if_expected_output_files_exist()
diff --git a/test/macros/gpt_to_grib_core.mv b/test/macros/gpt_to_grib_core.mv
new file mode 100644
index 0000000..9548681
--- /dev/null
+++ b/test/macros/gpt_to_grib_core.mv
@@ -0,0 +1,59 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2016 ECMWF. This software is distributed under the terms
+# of the Apache License version 2.0. In applying this license, ECMWF does not
+# waive the privileges and immunities granted to it by virtue of its status as
+# an Intergovernmental Organization or submit itself to any jurisdiction.
+#
+# ***************************** LICENSE END ************************************
+
+
+# read the source geopoints
+gpt = read('bufr_obs_filter_reference.gpt')
+
+
+# test the 'core' gpt-grib modes
+check_gpt_to_grib(gpt, "reciprocal",       "gpt_to_grib_reciprocal_reference.grb")
+check_gpt_to_grib(gpt, "exponential_mean", "gpt_to_grib_exp_mean_reference.grb")
+check_gpt_to_grib(gpt, "exponential_sum",  "gpt_to_grib_exp_sum_reference.grb")
+
+
+function check_gpt_to_grib(gpt:geopoints, method:string, ref_result:string)
+
+    grib = geo_to_grib
+    (
+        interpolation_method : method,
+        grid                 : [1.8,1.8],
+        tolerance            : 1,
+        geopoints            : gpt
+    )
+
+    ref = read(ref_result)
+
+    compare_vectors("latitudes",  latitudes(ref),  latitudes(grib))
+    compare_vectors("longitudes", longitudes(ref), longitudes(grib))
+    compare_vectors("values",     values(ref),     values(grib))
+
+end check_gpt_to_grib
+
+
+
+
+# compare a pair of vectors (e.g. 'values') and fail if the difference is
+# a large enough proportion of the max value of the original data
+
+function compare_vectors(vname: string, v1:vector, v2:vector)
+
+    maxdiff  = maxvalue(abs(v1-v2))
+    maxdiff_as_proportion_of_max = maxdiff / maxvalue(abs(v1))
+    print(vname, ' maxdiff: ', maxdiff, ' prop: ', maxdiff_as_proportion_of_max)
+
+    if maxdiff > 0.001 then # more then 0.1 percent difference
+        msg = vname & " has proportional max difference of " & maxdiff_as_proportion_of_max
+        fail(msg)
+    end if
+
+end compare_vectors
+
diff --git a/test/macros/gpt_to_grib_nearest.mv b/test/macros/gpt_to_grib_nearest.mv
new file mode 100644
index 0000000..309352e
--- /dev/null
+++ b/test/macros/gpt_to_grib_nearest.mv
@@ -0,0 +1,74 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2016 ECMWF. This software is distributed under the terms
+# of the Apache License version 2.0. In applying this license, ECMWF does not
+# waive the privileges and immunities granted to it by virtue of its status as
+# an Intergovernmental Organization or submit itself to any jurisdiction.
+#
+# ***************************** LICENSE END ************************************
+
+
+# read the source geopoints
+gpt = read('example_XYLDTZ.geo')
+
+
+# read the GRIB whose grid we will use as a template for the result
+template_grib = read('t1000_LL_7x7.grb')
+
+
+check_gpt_to_grib(gpt, template_grib, "nearest_gridpoint_sum",  "gpt_to_grib_nearest_sum_reference.grb")
+check_gpt_to_grib(gpt, template_grib, "nearest_gridpoint_mean", "gpt_to_grib_nearest_mean_reference.grb")
+
+
+gpt_c      = read('bufr_obs_filter_reference.gpt')
+template_c = read('gpt_to_grib_exp_mean_reference.grb')
+check_gpt_to_grib(gpt_c, template_c, "nearest_gridpoint_count", "gpt_to_grib_nearest_count_reference.grb")
+
+
+
+function check_gpt_to_grib(gpt:geopoints, template_grib:fieldset, method:string, ref_result:string)
+
+    print('Checking interpolation method ', method)
+
+    grib = geo_to_grib
+    (
+        interpolation_method : method,
+        geopoints            : gpt,
+        grid_definition_mode : "grib",
+        template_grib        : template_grib
+    )
+
+    # space-saving - bitmap out all the zero values
+    #grib = bitmap(grib, 0)
+    #write(ref_result, grib)
+
+
+    ref = read(ref_result)
+    ref = nobitmap(ref, 0)
+
+    compare_vectors("latitudes",  latitudes(ref),  latitudes(grib))
+    compare_vectors("longitudes", longitudes(ref), longitudes(grib))
+    compare_vectors("values",     values(ref),     values(grib))
+
+end check_gpt_to_grib
+
+
+
+# compare a pair of vectors (e.g. 'values') and fail if the difference is
+# a large enough proportion of the max value of the original data
+
+function compare_vectors(vname: string, v1:vector, v2:vector)
+
+    maxdiff  = maxvalue(abs(v1-v2))
+    maxdiff_as_proportion_of_max = maxdiff / maxvalue(abs(v1))
+    print(vname, ' maxdiff: ', maxdiff, ' prop: ', maxdiff_as_proportion_of_max)
+
+    if maxdiff > 0.001 then # more then 0.1 percent difference
+        msg = vname & " has proportional max difference of " & maxdiff_as_proportion_of_max
+        fail(msg)
+    end if
+
+end compare_vectors
+
diff --git a/test/macros/grib_dates.mv b/test/macros/grib_dates.mv
new file mode 100644
index 0000000..56f7035
--- /dev/null
+++ b/test/macros/grib_dates.mv
@@ -0,0 +1,54 @@
+# Metview Macro
+
+# **************************** LICENSE START ***********************************
+#
+# Copyright 2016 ECMWF. This software is distributed under the terms
+# of the Apache License version 2.0. In applying this license, ECMWF does not
+# waive the privileges and immunities granted to it by virtue of its status as
+# an Intergovernmental Organization or submit itself to any jurisdiction.
+#
+# ***************************** LICENSE END ************************************
+
+
+# read the original data file
+data  = read('fc_data.grib')
+bdate = base_date(data)
+vdate = valid_date(data)
+
+# these are what the results should be
+correct_bdate = [2016-04-15 12:00:00, 2016-04-15 12:00:00, 2016-04-15 12:00:00, 2016-04-15 12:00:00]
+correct_vdate = [2016-04-15 12:00:00, 2016-04-15 18:00:00, 2016-04-16 00:00:00, 2016-04-20 12:00:00]
+
+# check whether the computed results are correct - note that we can't just say
+# "if bdate <>correct_bdate" because of how these operators work on lists
+if 0 in (bdate = correct_bdate) then
+    print('base dates are not the same:')
+    print('reference: ', correct_bdate)
+    print('computed : ', bdate)
+    fail()
+end if
+
+if 0 in (vdate = correct_vdate) then
+    print('valid dates are not the same:')
+    print('reference: ', correct_vdate)
+    print('computed : ', vdate)
+    fail()
+end if
+
+
+# quick check to make sure that we return single dates if given single fields
+bdate1 = base_date(data[1])
+if (type(bdate1) <> 'date' or (bdate1 <> correct_bdate[1])) then
+    print('single base date is not the same:')
+    print('reference: ', correct_bdate[1])
+    print('computed : ', bdate1)
+    fail()
+end if
+
+vdate1 = valid_date(data[1])
+if (type(vdate1) <> 'date' or (vdate1 <> correct_vdate[1])) then
+    print('single valid date is not the same:')
+    print('reference: ', correct_vdate[1])
+    print('computed : ', vdate1)
+    fail()
+end if
diff --git a/test/macros/layoutx3.mv b/test/macros/layoutx3.mv
index c965bbf..e79eefb 100644
--- a/test/macros/layoutx3.mv
+++ b/test/macros/layoutx3.mv
@@ -56,9 +56,10 @@ dw = plot_superpage
 )
 
 
-plot (dw[1], data)
-plot (dw[2], data*10)
-plot (dw[3], data*20)
+# we add an empty mcont() definition to bypass any custom defaults the user has
+plot (dw[1], data,    mcont())
+plot (dw[2], data*10, mcont())
+plot (dw[3], data*20, mcont())
 
 wait_for_output()
 check_if_expected_output_files_exist()
diff --git a/test/macros/plot_coast_order.mv b/test/macros/plot_coast_order.mv
new file mode 100644
index 0000000..810e2cc
--- /dev/null
+++ b/test/macros/plot_coast_order.mv
@@ -0,0 +1 @@
+#Metview Macro
\ No newline at end of file
diff --git a/test/macros/set_output.mv b/test/macros/set_output.mv
index 8fc24dd..d95c484 100644
--- a/test/macros/set_output.mv
+++ b/test/macros/set_output.mv
@@ -22,9 +22,7 @@ function set_output(namex)
  if mode = "batch" then 
 
      out = ps_output(
-      output_name : namex,
-      output_ps_scale : 0.5,
-      OUTPUT_PS_COLOUR_MODEL : "RGB"
+      output_name : namex
      )
      svg = svg_output(
       output_name : namex

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/metview.git



More information about the debian-science-commits mailing list